2013-10-04 49 views
5

我有这个非常简单的csh脚本。未找到事件csh

#!/bin/csh 
     echo "Hello World!" 
     echo "How are you today?" 

但我得到的错误": Event not found.

有什么不对?

+0

将第一行修改为'#!/ bin/csh -f'并重试。它可能与你的'.cshrc'或'.tcshrc'有关。 – timrau

+0

试过。不工作 – Programmer

回答

7

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

[*] 我实际上不是法律义务张贴此链接。

+1

TL; DR:“什么问题?” “CSH”。对问题和答案都+1。 – stevesliva