我想在内部设置一个变量.bashrc
,使其等于可能返回错误代码的命令的输出。
我不知道做这样的事情会带来什么影响。即使此命令失败,其他一切都会正常工作吗?
当前的代码.bashrc
很简单:
export MYVAR=$(my_dubious_command 2>/dev/null)
这样做安全吗?
答案1
咱们试试吧:
$ var=$(false)
$ echo $?
1
$
但是,您不太可能errexit
在 .bashrc 中进行设置,并且下一个命令检查命令的退出代码的可能性更小,因此它不太可能影响任何内容。
.bashrc 等启动脚本是您可以执行的操作之一不是想要这样做set -o errexit
,因为您可能会因为简单的拼写错误或您无法控制的更改而被阻止出 shell。要检测但不因错误而失败,您可以捕获它们:
$ trap 'echo $?' ERR
$ var=$(false)
1
$
这在以下方面非常有用迅速的, 例如。
答案2
作为 l0b0说,您的 .bashrc 不太可能使用errexit
set 运行,但您可以通过测试来处理这种情况:
case $SHELLOPTS in
(*errexit*) set +e;
export MYVAR=$(my_dubious_command 2>/dev/null);
set -e
;;
(*) export MYVAR=$(my_dubious_command 2>/dev/null)
;;
esac
该export
命令,如所写,应返回 0,以防任何后续命令检查$?
;您没有为其提供任何无效选项,变量名称是有效的,并且您没有导出不存在的函数。
case 语句检查是否errexit
已设置;如果是这样,它会暂时将其关闭以便运行my_dubious_command
。