题
在采购一个env文件之一时会出现一些问题(一系列可变导出)
例如:
...
export MY_ROOT=/Soft/dev/blah/blah
export MY_BIN=${MY_ROOT}/bin
...
结果是
$. my_env.sh
$echo $MY_BIN
/bint/dev/blah/blah
=>“/bin”似乎覆盖了变量的开始而不是后缀。
任何想法?
顺便说一句,每次我们摘录此文件时,都会报告一个错误消息:
": Command not found"
这很奇怪。即使我们评论其整体内容,也会出现此消息。
开始时被调用的外壳似乎不错 #!/bin/sh
, , 或者 #!/bin/bash
.
控制字符呢?如何在Linux上筛选它们?
解决方案
这将修复文件中的行结尾:
dos2unix my_env.sh
由于无论如何还是在当前的外壳中运行,因此不需要一个只能采购的文件中的shebang。但是,作为评论,对于人类读者来说可能是有益的。
其他提示
“:找不到命令”是我看到的错误(MIS-)由MS Windows系统处理的错误。例如,如果使用Notepad或WordPad进行了修改,然后重新提交。
(有人抱怨它找不到[Ctrl-M]可执行文件---这是一个完全有效的,尽管非常不便,并且对Unix/linux有些可疑的文件名)。
通过GNU运行文件 cat -A
或者 od -x
或者 hexdump
命令查看这些(并验证我的诊断...或通过 tr -d
带有适当的引用和“逐字”处理的系统。 (例如 tr -d '[Ctrl-V],[Ctrl-M]'
在典型Linux系统上的bash下)。
取决于您的版本 tr
您可能可以使用: tr -d '\r'
或者 tr -d \015
(015是Cr的八分之一,“马车返回”或 ^M --- MS-DOS用于使用Cr/LF对作为线终止,这只是MS-DOS在被遗忘的深渊中腐烂的众多原因之一当涉及互操作性时。单个字符的线终结者对其他任何人都没有真正的问题...但是,当主流计算的其他所有内容都使用单个字符时,成对会导致实际转换问题。
哦耶, vim
有方便 set ff
(又名 set fileformat
可以从任何副本中处理UNIX,MACOS和MS-DOS线终止约定的选项 vim
无论您使用哪个平台。我似乎还记得 vim
默认值是检测文件正在使用的线终止的类型并保持不变(当然要默认到平台的本机上任何新文件)。