以下のスクリプトでは、ステートメント内のコードif
が実行されると、ユーザーは bash からログアウトされます。どうしてこれなの?
#!/bin/sh
if [ -z $1 ]; then
echo "1"
read w
exit 1
fi
if [ "$#" -gt "1" ]; then
echo "1"
read w
exit 2
fi
export PTSUSER=$1.
<some more code>
スクリプトが供給され、いずれかのif
ブロックがヒットした場合、現在のユーザーの bash シェルは終了し、ユーザーはログアウトされます。これは、スクリプトをソースすると、現在のユーザーの bash シェルを使用してスクリプトが実行されるためです。
$ . ./script.sh
一方、新しい bash シェル インスタンスで実行すると、これは発生せず、いずれかの終了コマンドがシェルで (いずれかの if ブロックで) 実行されると、bash インスタンスは終了します。
$ bash ./script.sh
スクリプトの呼び出し方法によって異なります。exit
現在のシェルを終了させます。source
ログイン後に開始されたシェルからのスクリプト、つまり現在のシェルのコンテキストで実行された場合、exit
ユーザーはログアウトされます。