如何在bash脚本中实现一个干运行选项?
我可以考虑把每一个命令都包装在一个if中,并且在命令中回显出来,而不是在脚本运行的情况下运行它。
另一种方法是定义一个函数,然后通过该函数传递每个命令。
就像是:
function _run () { if [[ "$DRY_RUN" ]]; then echo $@ else $@ fi } `_run mv /tmp/file /tmp/file2` `DRY_RUN=true _run mv /tmp/file /tmp/file2`
这是错误的,还有更好的方法吗?
见BashFAQ / 050:我试图把一个命令放入一个variables,但复杂的情况总是失败! 讨论这个问题。
虽然现在已经被删除了,但如何将testingfunction添加到程序中可能仍然有用。
我想玩丹尼斯·威廉姆森的答案。 这是我得到的:
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