我当前的设置以表面上处于.bashrc
(准确地为.bash_it/custom/funcs.bash
)的函数开始
#!/usr/bin/env bash
function proset() {
. proset-core "$@";
}
proset-core
对秘密进行一些解密并将这些秘密导出到会话中,因此需要.
而不是仅将其作为脚本/子shell运行。
如果proset-core
出现问题,我使用return
代替exit
,因为我不希望删除SSH连接。
if [ "${APP_JSON}" = "null" ] ; then
echo -e "\n${redtext}App named $NAME not found in ${APPCONF}. Aborting.${resettext}\n";
return;
fi
这在导出的proset
函数的上下文中是有意义的,但是排除了用作脚本的用法,因为return
除了函数内部之外无效。
有没有办法检测它是如何被调用的并且适当地返回一个或另一个?
答案 0 :(得分:2)
如果失败,只需尝试dadd - invalid,
dadD - also invalid,
dada - valid,
1121 - invalid,
1122 - valid
和return
。
exit
在顶级(函数外部)调用_retval=$?
return 2>/dev/null || exit "$_retval"
之后,代码仍将继续的唯一情况是,如果您执行了而不是源代码,并且应该发生这种情况,{{1}是正确的事。
答案 1 :(得分:1)
将$ @ args的内置变量$ SHLVL作为最后一个arg。然后在测试点:
if [ "${@: -1}" -lt $SHLVL ]; then
# SHLVL arg is less than current SHLVL
# we are in a subshell
exit
else
return
fi
答案 2 :(得分:0)
结束使用
calledBy="$(ps -o comm= $PPID)";
if [ "x${calledBy}" = "xsshd" ]; then
return 1;
else
exit 1;
fi
因为它不需要传递任何额外的东西。任何可能导致此问题的请注释。不太担心是特定于bash还是便携式。