如何在 Bash 脚本中实现空运行选项?
我可以考虑将每个命令包装在 if 中并回显该命令,而不是在脚本使用 dry-run 运行时运行它。
另一种方法是定义一个函数,然后通过该函数传递每个命令调用。
就像是:
function _run () {
if [[ "$DRY_RUN" ]]; then
echo $@
else
$@
fi
}
`_run mv /tmp/file /tmp/file2`
`DRY_RUN=true _run mv /tmp/file /tmp/file2`
这是否错误?还有更好的方法吗?
答案1
看BashFAQ/050:我尝试将命令放入变量中,但复杂的情况总是失败!讨论该主题。
尽管该部分现已被删除,如何为程序添加测试功能可能仍然有用。
答案2
我想尝试一下@Dennis Williamson 的答案。以下是我得到的答案:
Run () {
if [ "$TEST" ]; then
echo "$*"
return 0
fi
eval "$@"
}
这里很eval "$@"
重要,并且比简单地做更好$*
。$@
返回所有参数并$*
返回所有没有空格/引号的参数。
$ mkdir dir
$ touch dir/file1 dir/file2
$ FOO="dir/*"
$ TEST=true Run ls -l $FOO
ls -l dir/file1 dir/file2
$ Run ls -l $FOO
-rw-r--r-- 1 stefanl stefanl 0 Jun 2 21:06 dir/file1
-rw-r--r-- 1 stefanl stefanl 0 Jun 2 21:06 dir/file2