![测试 bash 中的选项效果不佳](https://linux22.com/image/126509/%E6%B5%8B%E8%AF%95%20bash%20%E4%B8%AD%E7%9A%84%E9%80%89%E9%A1%B9%E6%95%88%E6%9E%9C%E4%B8%8D%E4%BD%B3.png)
我试图使用以下命令测试 noclobber 选项:if [ -o noclobber ]
但它什么也没做。
我将 noclobber 选项设置为使用:set +o noclobber
。
prompt> cat checkoption.sh
#!/bin/bash
if [ -o noclobber ]
then
echo "Option is on."
fi
prompt>
prompt> set +o noclobber
prompt> set -o | grep noglobber
noclobber on
prompt> ./checkoption.sh
prompt>
知道为什么我在这里收不到消息吗?
答案1
Shell 选项不会在 shell 会话之间继承,并且您在这里处理两个 shell 会话:
- 您在其中设置 shell 选项的交互式会话,以及
- 您在其中测试选项的 shell 脚本会话。
shell 脚本永远不会检测到在调用交互式 shell 会话中设置了该选项。
解决方案:
将您的代码转换为 shell 函数(例如
$HOME/.bashrc
):checknoclobber () { [ -o noclobber ] && echo 'Noclobber is on'; }
或者,对于一般情况,
checkoption () { if [ -o "$1" ]; then printf '%s is set\n' "$1" >&2 return 0 else printf '%s is not set (or invalid option name)\n' "$1" >&2 return 1 fi }
在脚本中设置选项。
source
使用或命令在交互式 shell 中获取脚本文件.
。