以下是myscript.sh
的内容:
#!/bin/bash
set -euo pipefail
# bar is an unexisting command
bar > test
当我调用./myscript.sh
时,我收到以下错误消息(预期),
./myscript.sh: line 5: bar: command not found
但是创建了一个空的test
文件:
-rw-r--r-- 1 spg staff 0B 23 Feb 16:32 test
我认为通过激活“严格”模式(使用set -euo pipefail
的组合),找不到bar
命令的失败将在此时停止脚本执行,而不是继续创建空test
个文件。
如果test
运算符左侧的表达式(在本例中为>
)失败,我想知道如何阻止bar
文件的创建。
答案 0 :(得分:2)
重定向在调用进程之前完成,以便它的stdout(在本例中)可以连接到文件。这就是即使test
不存在也会创建bar
的原因。它不知道在设置重定向时调用命令会失败。
我认为在使用重定向时避免创建文件有一种直接的方法。您可以尝试先测试bar
是否会成功,比如说
if command -v bar; then
bar > test
else
exit 1 # or whatever you want since the command would have failed
fi