2013-10-04 1 views
5

У меня есть этот очень простой скрипт csh.Событие не найдено csh

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

Но я получаю ошибку ": Event not found.

Что не так?

+0

Измените 1-ю строку на '#!/Bin/csh -f' и повторите попытку. Это может быть связано с вашими '.cshrc' или' .tcshrc'. – timrau

+0

пробовал. не работает – Programmer

ответ

7

csh использует символ ! для замены истории. Таким образом, в последовательности !"" не рассматривается как закрывающая кавычка для строки; скорее, оболочка ищет что-то в вашей истории команд, начиная с ", точно так же, как ввод !foo в командной строке повторяет самую последнюю команду, начинающуюся с foo.

По крайней мере, для исходного csh эта подстановка всегда выполняется даже в строках с одной кавычкой (поэтому изменение двойных кавычек в одинарные кавычки не обязательно поможет).

Единственный способ избежать ! персонажа есть с \ обратной косой черты.

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

(На некоторые системы, я считаю, что использование одиночные кавычки, а не двойные кавычки, это избежать ошибки, я думаю, что это потому что в этих системах /bin/csh является символической ссылкой на /bin/tcsh, который работает немного по-другому. вы не должны зависеть от того, что если вы хотите, чтобы ваш скрипт переносимым.)

Обратите внимание, что я также добавил -f для линии #!. Это предотвращает запуск оболочки $HOME/.cshrc при запуске, и это, как правило, хорошая идея для сценариев csh. Это заставляет их работать немного быстрее, и это предотвращает случайную зависимость от вашего собственного .cshrc, что может быть проблемой, когда другие запускают ваш скрипт.

И в любом вопросе о CSH сценариев, я по закону обязан [*], чтобы отправить эту ссылку:

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

[*] Я на самом деле не по закону обязан опубликовать эту ссылку.

+1

TL; DR: «Что не так?» "CSH". +1 для обоих вопросов и ответов. – stevesliva