我正在尝试在tcsh(版本6.12.00(Astron)2002-07-23)中编写一个简单的脚本,但是我被if-then-else语法绊倒了。我是剧本写作的新手。
此脚本有效:
#!/bin/tcsh -f
if (1) echo "I disagree"
但是,这个没有:
#!/bin/tcsh -f
if ( 1 ) then
echo "I disagree"
else
echo "I agree"
endif
首先,这段代码在运行时会回应两个语句。在我看来,它永远不应该看到别的。另一方面,输出还将这些回声散布在“:找不到命令”的三次迭代中。
编辑添加:这是逐字输出:
: Command not found.
I disagree
: Command not found.
I agree
: Command not found.
我知道标准建议是使用另一个shell,但我真的无法做到这一点(新工作,新同事,其他人都使用tcsh,希望我的脚本可以移植)。
答案 0 :(得分:4)
当我复制并粘贴您的脚本并在我的系统上运行它时,它会正确打印I disagree
。
当我将行结尾更改为Windows风格时,我得到:
: Command not found.
I disagree
: Command not found.
I agree
: Command not found.
因此,您的脚本很可能具有Windows样式的行结尾。修复行结尾,它应该工作。 dos2unix
命令是一种方法(man dos2unix
首先;与大多数UNIX文本处理命令不同,它替换其输入文件。)
问题是tcsh无法识别^ M('\r'
)作为行尾字符。它将行尾的then^M
视为单个命令,并输出错误消息then^M: Command not found
。 ^ M导致光标返回到行的开头,消息的其余部分将覆盖then
。