この非常に単純な csh スクリプトがあります。
#!/bin/csh
echo "Hello World!"
echo "How are you today?"
しかし、私はエラーが発生しています": Event not found.
なにが問題ですか?
この非常に単純な csh スクリプトがあります。
#!/bin/csh
echo "Hello World!"
echo "How are you today?"
しかし、私はエラーが発生しています": Event not found.
なにが問題ですか?
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
[*]このリンクを掲載する法的義務はありません。