我发现自己出局了;在我制作了一个脚本并从 调用它之后,我无法登录 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
达到你想要的效果。