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

Exit causes root logout if script user executes the script outside of the script directory

Bash 脚本错误用户在退出时从 root 中注销

我有一个很大的 Bash 脚本,如果某些用户输入无效,它需要退出脚本并重新启动它。我有一个奇怪的错误,如果用户确实在脚本所在的目录之外执行脚本,他就会从根目录中注销。但是如果脚本是在脚本所在的目录里面执行的,就不会出现这种情况。

我已经尝试移除出口,但这只会让事情变得更糟。

#!/bin/bash

some_function() {

      read -p "Enter something: "

      # Some commands

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

}

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

你没有这么说,但你似乎正在寻找包含这个退出函数的脚本。如果你正在采购它,那么就好像每个命令都是在命令行中输入的一样......所以退出将注销任何 shell 你是 运行.

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

如果您不知道脚本是否会被获取,您将需要检测它并根据它的调用方式选择正确的行为。例如:

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