2013-10-04 189 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へのシンボリックリンクは、ですので、あなたのスクリプトがポータブルになりたい場合。あなたはそれに依存してはなりません。)私もを追加しました

注意をオプションを#!行に追加します。これにより起動時にシェルが$HOME/.cshrcを実行するのを防ぐことができます。これは一般的にはcshスクリプトにとっては良い考えです。彼らは少し速く実行され、自分の.cshrcに偶然依存することを防ぎます。これは他の人があなたのスクリプトを実行するときに問題になる可能性があります。 [*]このリンクを投稿する

そしてcshのスクリプトに関するご質問には、私が法的に義務づけています:

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

[*] 私は実際に合法的にこのリンクを投稿する義務はないのです。

+1

TL; DR: "何が間違っていますか?" "csh"質問と回答の両方に+1してください。 – stevesliva

関連する問題