0

以下のスクリプトでは、ステートメント内のコード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>
4

2 に答える 2

3

スクリプトが供給され、いずれかのifブロックがヒットした場合、現在のユーザーの bash シェルは終了し、ユーザーはログアウトされます。これは、スクリプトをソースすると、現在のユーザーの bash シェルを使用してスクリプトが実行されるためです。

$ . ./script.sh

一方、新しい bash シェル インスタンスで実行すると、これは発生せず、いずれかの終了コマンドがシェルで (いずれかの if ブロックで) 実行されると、bash インスタンスは終了します。

$ bash ./script.sh
于 2012-09-21T10:22:52.927 に答える
1

スクリプトの呼び出し方法によって異なります。exit現在のシェルを終了させます。sourceログイン後に開始されたシェルからのスクリプト、つまり現在のシェルのコンテキストで実行された場合、exitユーザーはログアウトされます。

于 2012-09-21T10:20:30.170 に答える