gpt4 book ai didi

bash - 显示命令而不执行它们

转载 作者:行者123 更新时间:2023-11-29 08:42:40 26 4
gpt4 key购买 nike

我经常交互循环,例如我的文件并想对所有文件执行特定操作,假设我想重命名所有文件:

for file in $(ls); do mv "$file" "${file}_new"; done

这很好用。但是在调用这个命令之前,我想看看它到底做了什么,所以我会在前面加一个echo

for file in $(ls); do echo mv "$file" "${file}_new"; done

然后它会向我显示它会调用的所有命令。如果我对它们感到满意,我会删除 echo 并执行它。

然而,当命令有点微妙时,可能包括管道或多个命令,这就不再起作用了。当然我可以使用 ' 这样特殊字符就不会被解释,但是我没有参数扩展。我也可以转义特殊字符,但这会变得非常乏味。

我的问题是,执行此操作的最佳方法是什么?我在 man bash 中读到关于选项 -n 的内容,它执行“读取命令但不执行它们。这可用于检查 shell 脚本的语法错误. 这会被交互式 shell 忽略。”这正是我所需要的,但我需要它用于交互式 shell。请注意,选项 -x-v 没有帮助,因为它不仅会显示命令,还会调用它,然后可能已经太晚了。

最佳答案

explained by devnull 没有“试运行”选项但有一个简单的解决方法:

debug=
#debug=echo

$debug mv "$file" "${file}_new"

如果您从第二个作业中删除注释(不更改任何其他内容),则为危险的 mv 命令启用“试运行”。

更详细的方法是检查某些条件(如命令行选项):

debug=
if [[ ...enable dry run?... ]]; then
debug=echo
fi

注意:仅当您启用选项 -u(“替换时将未设置的变量视为错误。”)时才需要空赋值。

重要:当您的命令使用重定向时(因为 shell 将始终在命令启动之前执行重定向),这将无法正常工作。

关于bash - 显示命令而不执行它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19115156/

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