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 shell 将被退出,并且用户将被注销。这是因为获取脚本将使用当前用户的 bash shell 来执行脚本。

$ . ./script.sh

另一方面,如果它在新的 bash shell 实例中运行,则不会发生这种情况,并且一旦在 shell 中执行任一退出命令(在任一 if 块中),bash 实例就会退出。

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

这取决于您如何调用脚本。exit导致当前 shell 退出。如果您source在登录后从 shell 启动脚本,即它在当前 shell 的上下文中运行,exit则会将用户注销。

于 2012-09-21T10:20:30.170 回答