使用cygwin,我有
currentFold="`dirname $0`"
echo ${currentFold}...
这输出 ...gdrive/c/ 而不是 /cygdrive/c/...
这是为什么 ?
您的脚本以 DOS 格式存储,每行末尾都有一个回车符和换行符(有时写为“\r\n”);unix 仅在行尾使用换行符(“\n”),因此 bash 将回车误认为是命令的一部分。当它看到
currentFold="`dirname $0`"\r
它尽职尽责地将 currentFold 设置为“/cygdrive/c/\r”,并且当它看到
echo ${currentFold}...\r
它打印“/cygdrive/c/\r...\r”。最后的回车并不重要,但中间的那个意味着“...”被打印在“/cy”的顶部,你最终会得到“...gdrive/c/”。
解决方法:将脚本转成unix格式;我相信你会有dos2unix
可用的命令,但你可能不得不四处寻找替代品。在紧要关头,您可以使用
perl -pi -e 's/\r\n?/\n/g' /path/to/script
(见http://www.commandlinefu.com/commands/view/5088/convert-files-from-dos-line-endings-to-unix-line-endings)。然后切换到以 unix 格式而不是 DOS 格式保存的文本编辑器。