いくつかの重要な点を理解したいと思います。 Shebang行(#!/ bin / bash)なしでbash構文で書かれたスクリプトがあり、デフォルトのシェルはtcshです。
- ファイルに実行権限を付与し、ファイルのフルパスを入力してデフォルトのシェル(tcsh)で実行すると、正しく実行されます。 shebang行を入力せずにどのようにtcshでスクリプトを正しく実行できますか?
- デフォルトのシェルtcshの同じファイルに対してsourceコマンドを使用して実行すると、構文エラーが発生します(shebang bash行を使用したにもかかわらず)。なぜですか?
いくつかの実験の後、以下を発見した。ありがとうございます。これが正しいようです。いくつかの実験を行い、以下を達成しました。 - ソース(ドット演算子はbashでのみエイリアス)コマンドを使用してファイルを実行します。 - 実行せずに実行します。許可 - shebang行に関係なく現在のシェルを使用して実行 - shebang行が存在し、ファイル名(フルパス)を入力してファイルを実行する場合(ここでは実行権限が必要です)、shebang行でシェルを使用してファイルを実行します。 Shebang行が存在せず、名前で実行されている場合、現在のシェルが何であれ、私の場合は常にbashが使用されます。なぜなのかわかりません。 / binファイルからbashが最初に出てくるからですか? ? ? ? ? ?私に確認してくれますか?
答え1
実行可能なスクリプトにshebang行がない場合は実行されます/bin/sh
。以下を使用して実行する場合source
:
$ cat s.sh
echo "shell=$shell"
echo "BASH=$BASH"
$ ./s.sh
shell=
BASH=/usr/local/bin/bash
$ tcsh
[~]% ./s.sh
shell=
BASH=/bin/sh
[~]% source s.sh
shell=/bin/tcsh
BASH: Undefined variable.