スクリプトがbash
またはから実行されているかどうかを確認する必要がありcsh
ます。
#!/bin/csh
if ( `echo $SHELL` != '/bin/tcsh' )
echo 'Please run it in csh'
exit
endif
このコードは与えています
bash: g.csh: line 7: syntax error: unexpected end of file
変数$0(実行中のファイル/シェルの名前)を確認してください。やってみる
echo $0
bashまたはcshの下で
/bin/bash
また
csh
bash
との両方で実行される構文を使用する場合は、かなり制限されますtcsh
。実際、私tcsh
は設定されていないようですSHELL
。これが、あなたがまだいると思う理由かもしれません。bash
私がから起動tcsh
した場合bash
、SHELL
まだ/bin/bash
です。そうは言っても、本当にチェックする必要がある場合は、次のようなものが機能する可能性があります(注意:Linux固有):
test `readlink /proc/$$/exe` != `which tcsh` && echo you must use tcsh && exit 1
これは両方のシェルで機能します。csh
また、と同じバイナリによって提供されるためtcsh
(少なくとも私にとってはそうです)、これはまたはのいずれかをチェックすることにtcsh
注意 してくださいcsh
。
が欠落しているようですthen
。これを試して。
#!/bin/csh
if ( "$SHELL" != '/bin/tcsh' ) then
echo 'Please run it in csh'
exit
endif
ハッシュバンがcshを強制するという点で、コメント投稿者は正しいようですが。
この行は、ほぼすべてのシェルで機能するはずです
sh -c "[ \"$SHELL\" = \"tcsh\" ] || { echo \"Please run in tcsh\"; exit 1; }" || exit
しかし、これがあなたが解決しようとしている問題を解決するための最良の方法であるかどうかはわかりません。