0

スクリプトが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
4

4 に答える 4

6

変数$0(実行中のファイル/シェルの名前)を確認してください。やってみる

echo $0

bashまたはcshの下で

/bin/bash

また

csh
于 2013-03-22T16:17:37.053 に答える
2

bashとの両方で実行される構文を使用する場合は、かなり制限されますtcsh。実際、私tcshは設定されていないようですSHELL。これが、あなたがまだいると思う理由かもしれません。bash私がから起動tcshした場合bashSHELLまだ/bin/bashです。そうは言っても、本当にチェックする必要がある場合は、次のようなものが機能する可能性があります(注意:Linux固有):

test `readlink /proc/$$/exe` != `which tcsh` && echo you must use tcsh && exit 1

これは両方のシェルで機能します。cshまた、と同じバイナリによって提供されるためtcsh(少なくとも私にとってはそうです)、これはまたはのいずれかをチェックすることにtcsh 注意 してくださいcsh

于 2013-03-22T15:03:42.107 に答える
1

が欠落しているようですthen。これを試して。

#!/bin/csh

if ( "$SHELL" != '/bin/tcsh' ) then
   echo 'Please run it in csh' 
   exit
endif

ハッシュバンがcshを強制するという点で、コメント投稿者は正しいようですが。

于 2013-03-22T14:59:26.577 に答える
0

この行は、ほぼすべてのシェルで機能するはずです

sh -c "[ \"$SHELL\" = \"tcsh\" ] || { echo \"Please run in tcsh\"; exit 1; }" || exit

しかし、これがあなたが解決しようとしている問題を解決するための最良の方法であるかどうかはわかりません。

于 2013-03-22T15:03:09.343 に答える