ここで説明することはあまりありません。他のシェルに切り替えても、echo $ Shellが常に出力/ bin/bashを返す理由を知りたいだけです。 $ Shellが私がいる正しいシェルパスを提供することを確認するために何をしなければなりませんか?.
[root@localhost user]# echo $0
bash
[root@localhost user]# echo $Shell
/bin/bash
[root@localhost user]# csh
[root@localhost user]# echo $0
csh
[root@localhost user]# echo $Shell
/bin/bash
[root@localhost user]# tcsh
[root@localhost user]# echo $0
tcsh
[root@localhost user]# echo $Shell
/bin/bash
[root@localhost user]# sh
sh-4.2# echo $0
sh
sh-4.2# echo $Shell
/bin/bash
sh-4.2#
[root@localhost user]# which csh
/bin/csh
[root@localhost user]# which csh
/bin/csh
$Shell
は環境変数です優先シェルを保持し、現在実行中のシェルではありません。 login
データベース内のユーザーエントリのShellフィールドに基づいてログインするpasswd
またはその他のアプリケーションによって初期化されます(your login Shell)。
この変数は、xterm
、vim
...などのアプリケーションに、シェルを起動したときにどのシェルを起動するかを指示するために使用されます。通常は、passwd
データベースに設定されているシェル以外のシェルを使用する場合に変更します。
Linuxで、シェルのようなBourneまたはcshを使用して、現在のシェルインタープリターのパスを取得するには、次のようにします。
readlink "/proc/$$/exe"
rc
に相当するもの:
readlink /proc/$pid/exe
fish
に相当するもの:
set pid %self
readlink /proc/$pid/exe
csh/tcshは、$Shell
変数をシェルのパスに設定します。
Bourneのようなシェルでは、$0
には、シェルが受け取った最初の引数(argv[0]
)が含まれます。これは、慣例により、呼び出されるコマンドの名前です(login
アプリケーションでも、規則では、最初の文字を-
にして、シェルにログインシェルであることを伝えます。たとえば、スクリプトを解釈するために呼び出されない場合は、ログインセッションのカスタマイズを含む.profile
または.login
ファイルをソースにする必要があります)または、追加の引数なしでShell -c '...'
で呼び出された場合。
に:
$ bash -c 'echo "$0"'
bash
$ /bin/bash -c 'echo "$0"'
/bin/bash
どちらの場合も/bin/bash
を呼び出すのは私のシェルですが、最初のケースでは最初の引数としてbash
を使用し、2番目のケースでは/bin/bash
を使用します。いくつかのシェルでは、代わりに次のような任意の文字列を渡すことができます。
$ (exec -a whatever bash -c 'echo "$0"')
whatever
Ksh/bash/zsh/yash内。
echo $0
コマンドの出力が-bashの場合、bashがログインシェルとして呼び出されたことを意味します。出力がbashのみの場合は、ログインしていないシェルを使用しています。
ENV
がトリガーされて目的の出力が表示されるため、/bin/bash
[root@dcconnect ~]# env | grep -i Shell
SHELL=/bin/bash
echo #Shell
の出力はENV
変数から取得されます
$0
は、シェルを起動したコマンドです。 $Shell
は、システムのデフォルトのシェルです