gpt4 book ai didi

linux - 使用 bash 返回码进行编程是一种好方法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:07 25 4
gpt4 key购买 nike



当我使用 Bash 自动执行操作时,我经常使用 Unix 命令的返回值来测试以下内容:文件中是否存在字符串 (grep) 或进程是否正在运行 (ps aux + grep)。

这是一个例子,如果没有匹配项,grep 将返回 1,如果至少有一个结果,则返回 0。

$ ps aux | grep process_that_doesntexist | grep -v grep
$ echo $?
1
$ ps aux | grep init | grep -v grep
root 1 0.0 0.1 135188 6660 ? Ss 01:43 0:00
$ echo $?
0

这是一种坏习惯/编程方式吗?以这种方式编写的 bash 脚本应该在生产服务器上运行吗?

谢谢。

最佳答案

通过 ps 搜索不是一个好习惯。如果您的操作系统支持,请改用 pgrep

不过,总的来说,是的,使用退出状态来判断grep是否匹配内容成功是完全合适的。也就是说,不是引用 $?,而是直接在条件中求值:

# When possible, do this:
if grep -q -e value <input; then
echo "found value" >&2
else
echo "did not find value" >&2
fi

...而不是:

# ...not this:
grep -q -e value <input
if [ "$?" -eq 0 ]; then
echo "found value" >&2
else
echo "did not find value" >&2
fi

这仍然具有相同的效果 -- if COMMAND;然后 ... 检查 COMMAND 的退出状态——但没有额外的间接层。

关于linux - 使用 bash 返回码进行编程是一种好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40668493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com