5

cshまったく恐ろしいシェルです。(「csh を使用しないでください」という避けられないコメントを避けるために、その声明を前もって作成します。または、読者のために、単にそれを述べておく必要があります。正気を重視する場合は、使用しないでくださいcsh。)csh私が便利にしようとしているスクリプトのかなり大きなコレクションでありexit、ソースファイルから呼び出されたときにスクリプトを終了しないことを発見しました。言い換えると:

#!/bin/csh
source [file with content "exit"]
echo No reasonable script should print this

出力を生成します。

その動作を変更する方法はありますか? 私が知る限り、私が変更しているスクリプトの元の作成者は、メイン スクリプトを終了することを意図しており、それは確かに望ましい動作であり、上記の例を経由で呼び出すだけshでその結果が得られますが、何が得られますか? この動作に合理的な目的はありますか? (それは私の怒りです。本当の問題は、動作を変更するための csh のオプションはありますか?)

4

6 に答える 6

0

exit をエイリアスして値を設定し、それを確認できます。

$ cat a.csh
#!/bin/csh
alias exit 'set abort=1; ""exit'
...
exit

そして、ファイルを調達するとき:

$ cat b.csh
#!/bin/csh
source a.csh
if ( $?abort ) exit

補遺:

その場でソースコードを変更するかもしれないと言うのを忘れていました:

$ cat b.csh
#!/bin/csh
source `sed '2 i alias exit '"'set abort=1; "'""exit'"'" a.csh`
if ( $?abort ) exit

これは、スクリプトを直接変更する場合と比べて多少のペナルティはありますが、元のスクリプトを気にする必要はもうありません。

于 2013-02-18T13:27:25.810 に答える