我使用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是我文件的结尾,不应该是错误消息的一部分。
这可能是一个非常微不足道的错误。为什么我不能在我的脚本中编写多行代码并成功运行它?
答案 0 :(得分:2)
您的脚本是使用DOS编辑器编写的,包含\r\n
行结尾。 * nix(包括cygwin)使用\n
行结尾,因此\r
字符保留在sed p
命令的末尾。
查看您是否有dos2unix
可用,或在脚本
sed 's/\r$//' umlauts.sh
答案 1 :(得分:0)
在反斜杠\(尾随空格)之后也避免使用空格,不知何故它会导致我的Cygwin出现问题。