事件未找到 csh

5
我有一个非常简单的csh脚本。
#!/bin/csh
        echo "Hello World!"
        echo "How are you today?"

但是我遇到了错误“:事件未找到。”

问题出在哪里?


将第一行修改为 #!/bin/csh -f,然后再试一次。这可能与您的 .cshrc.tcshrc 有关。 - timrau
1个回答

8
csh使用!字符进行历史替换。所以在序列!"中,"不被视为字符串的结束引号;相反,shell会搜索你的命令历史记录中以"开头的内容,就像在命令行上输入!foo一样,重复最近的以foo开头的命令。
至少对于原始的csh,即使在单引号字符串中也总是进行这种替换(因此将双引号更改为单引号并不能保证解决问题)。
唯一的转义!字符的方法是使用\反斜杠:
#!/bin/csh -f
echo "Hello World\!"
echo "How are you today?"

在一些系统上,我发现使用单引号而不是双引号可以避免错误。我认为这是因为在那些系统上,/bin/csh 是一个指向 /bin/tcsh 的符号链接,它的工作方式有一点不同。如果您想让您的脚本具备可移植性,就不应该依赖此功能。

请注意,我还在 #! 行中添加了一个 -f 选项。这可以防止 shell 在启动时执行您的 $HOME/.cshrc,并且对于 csh 脚本来说通常是个好主意。它使它们运行得更快,并防止意外依赖于您自己的 .cshrc,这可能会在他人运行您的脚本时出现问题。

无论何时涉及到 csh 脚本的问题,我都有法律义务 [*] 发布此链接:

http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot

[*] 我实际上没有法律义务发布此链接。


2
简而言之:「出了什么问题?」 「csh。」 对于这两个问题和答案都给予+1。 - stevesliva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接