我经常交互式地遍历例如我的文件,并希望对他们进行具体操作,假设我想重命名所有文件:显示命令而不执行它们
for file in $(ls); do mv "$file" "${file}_new"; done
这工作正常。但是,调用此命令之前,我想看看它实际上做了,所以我会在前面
for file in $(ls); do echo mv "$file" "${file}_new"; done
添加回声那么就说明我,它会调用所有命令。如果我对他们感到满意,我将删除echo
并执行它。
但是,当命令有点微妙时,可能包括管道或多个命令,这不再起作用。当然我可以使用'
,所以特殊字符不会被解释,但是我没有参数扩展。我也可以逃脱特殊字符,但这会变得非常乏味。
我的问题是,最好的方法是什么?我在man bash
中读到了有关选项-n
的选项,它可以“读取命令但不执行它们,这可以用来检查shell脚本是否有语法错误,这被交互式shell忽略。这正是我所需要的,但我需要它作为交互式shell。请注意,选项-x
或-v
不起作用,因为它不仅会显示命令,还会调用它,然后它可能已经太晚了。
从技术上讲,是没有办法来实现这一目标。 – devnull
或者,您可以将别名每个命令清空为别名 ='bash -c“”'',以便接受参数,但不会执行任何操作。你可以运行一个* alias-emptifier *循环,执行你想要的进程,然后运行* alias-restore *命令 - 恢复它们的功能。 –
Rubens
顺便说一句,在$(ls)中使用'for file是为了没有理由牺牲一个子进程。为什么不使用''in file in *'? – cdarke