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



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 注销。

你没有这么说,但似乎你正在采购包含这个退出函数的脚本。如果您正在采购它,那么就好像每个命令都是在命令行中键入的......因此,退出将注销您正在运行的任何 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
}

最新更新