如果脚本用户在脚本目录之外执行脚本,则退出会导致root用户注销

时间:2019-04-12 10:08:54

标签: bash root exit logout

Bash脚本错误用户退出时退出了根目录

我有一个很大的Bash脚本,如果某些用户输入无效,则需要退出该脚本并重新启动它。我遇到了一个奇怪的错误,即如果用户确实在脚本所在的目录之外执行脚本,那么他将退出root用户。但是,如果脚本是在脚本所在的目录中执行的,则不会发生。

我已经尝试删除出口,但这只会使情况变得更糟。

#!/bin/bash

some_function() {

      read -p "Enter something: "

      # Some commands

      if [[ $? -gt 0 ]]; then
            echo "error"
            . /whatever/location/script.sh && exit 1
      fi

}

预期结果是,脚本仅重新启动并退出用户运行的进程。实际结果就是这样,但是如果脚本在此之后终止,则用户将从root用户注销。

1 个答案:

答案 0 :(得分:0)

您没有这么说,但是您似乎正在寻找包含退出此功能的脚本。如果您正在采购它,就好像每个命令都在命令行中键入一样...因此exit将注销您正在运行的任何Shell。

对于始终源脚本,请使用return而不是exit

如果您不知道该脚本是否将被源出,则需要检测它并根据其调用方式选择适当的行为。例如:

some_function() {
  read -p "Enter something: "
  # Some commands
  if [[ $? -gt 0 ]]; then
      echo "error"
      if [[ "${BASH_SOURCE[0]}" != "${0}" ]]; then
        # sourced
        . /whatever/location/script.sh && return 1
      else
        # not sourced
        . /whatever/location/script.sh && exit 1
      fi
  fi
}