当我调试脚本时,我经常会选择一条我不太确定的行。例如:
hdiutil create -srcfolder "$3" -format UDRO -fs APFS -volname "$1" -ov "$2"
只需将其更改为:
echo hdiutil create -srcfolder "$3" -format UDRO -fs APFS -volname "$1" -ov "$2"
然后当我第一次运行我的脚本时,它不会运行(可能不正确的)命令,但我可以看到它并检查它看起来是否正确......甚至可以复制/粘贴它以手动运行它。
但如果任何参数中包含空格,则这不可靠/正确。 echo
在参数中显示空格,与参数之间的分隔符相同。
我找到set -x
命令,它可以帮助记录每个命令和参数正确转义!这就是我现在所使用的,但是它非常粗糙(在我只专注于一行的大型脚本中很吵)并且不会阻止实际未经验证的命令运行。
有一种快速/干净的方法只需一行即可。或者使用常用命令的其他一些技巧 - 可能是env
和printf
或其他什么组合?或基本上为此目的包含的专用命令?
理想情况下,我可以预先查看有问题的一行,它会“注释掉”和告诉我完全它是什么会完成。
答案 0 :(得分:1)
您可以使用printf %q
:
#!/bin/bash
run() {
printf "%q " "$@" # show each argument shell escaped
printf '\n'
(( dryrun )) || "$@" # optionally run the command
}
dryrun=1
run hdiutil create -srcfolder "$3" -format UDRO -fs APFS -volname "$1" -ov "$2"