.bashrc 使用“exit”调用的脚本阻止登录

.bashrc 使用“exit”调用的脚本阻止登录

我发现自己出局了;在我制作了一个脚本并从 调用它之后,我无法登录 root ~/.bashrc

~/.bashrc

#... do stuff then run my script
source ~/myscript.sh

〜/ myscript.sh

#!/bin/bash
if [myConditional]; then
  exit
fi
# otherwise do stuff

我所希望的是,当我以 root 身份登录时,myscript.sh 将运行,如果 myConditional 为 true,myscript.sh 将停止运行任何进一步的命令,但会返回到 .bashrc 并且用户仍将登录像往常一样作为根。但相反,exit我根本无法登录!它只是让我返回到登录提示。

除此之外我还应该使用另一个命令吗exit?显然,我可以if通过声明else并删除来扩展该声明exit,但出于教育目的,我想知道是否有更合适的方法。 (部分原因是我想避免深层嵌套的if语句;它可能是一个相当大的脚本)

答案1

source filename.sh(或. filename.sh)运行以下内容filename.sh 在当前的解释器中(本质上,就好像您当时复制了内容一样)。因此,exit将退出该解释器。

如果您只想将脚本作为单独的程序运行,请不要使用source~/myscript.sh如果您首先使用 使其可执行chmod +x ~/myscript.sh,则只会运行它,或者如果您愿意,也可以使用bash ~/myscript.sh。这将启动一个新的 shell 来运行您的脚本,就像系统上的任何其他程序一样。

另一方面,如果您确实想要source您的脚本(例如,因为它将设置环境变量),您可以停止运行文件的其余部分,而不会影响.bashrc运行它的 shell使用return

return也可用于终止使用.( source) 内置函数执行的脚本的执行,返回n或脚本内执行的最后一个命令的退出状态作为脚本的退出状态

在这种情况下,您的myscript.sh文件将包含:

if [[ condition ]]
then
    return 0
fi

达到你想要的效果。

相关内容