我有一个很大的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用户注销。
答案 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
}