为什么这个多行shell脚本不能使用cygwin,尽管它在一行中有效?

时间:2014-04-23 10:40:31

标签: bash shell sh

我使用cygwin for Windows来运行shell脚本。我的脚本将变音符号更改为LaTeX等效项。它有效。

我通过以下方式运行脚本:

sh umlauts.sh
pause

这是我的sed命令,完美无缺。

/usr/bin/find -name \*.tex | xargs -I p sed -i 's/ü/{\\"u}/g' p

但是,在同一个文件中运行两次会导致错误:

/usr/bin/find -name \*.tex | xargs -I p sed -i 's/ü/{\\"u}/g' p
/usr/bin/find -name \*.tex | xargs -I p sed -i 's/ä/{\\"a}/g' p

我明白了:

: no such file or directory.tex

这看起来像一个格式奇怪的消息,因为.tex是我文件的结尾,不应该是错误消息的一部分。

这可能是一个非常微不足道的错误。为什么我不能在我的脚本中编写多行代码并成功运行它?

2 个答案:

答案 0 :(得分:2)

您的脚本是使用DOS编辑器编写的,包含\r\n行结尾。 * nix(包括cygwin)使用\n行结尾,因此\r字符保留在sed p命令的末尾。

查看您是否有dos2unix可用,或在脚本

上运行此命令
sed 's/\r$//' umlauts.sh

答案 1 :(得分:0)

在反斜杠\(尾随空格)之后也避免使用空格,不知何故它会导致我的Cygwin出现问题。