如何调试单个shell命令调用,准确查看参数?

时间:2018-06-15 17:05:29

标签: bash debugging sh

当我调试脚本时,我经常会选择一条我不太确定的行。例如:

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命令,它可以帮助记录每个命令参数正确转义!这就是我现在所使用的,但是它非常粗糙(在我只专注于一行的大型脚本中很吵)并且不会阻止实际未经验证的命令运行。

有一种快速/干净的方法只需一行即可。或者使用常用命令的其他一些技巧 - 可能是envprintf或其他什么组合?或基本上为此目的包含的专用命令?

理想情况下,我可以预先查看有问题的一行,它会“注释掉”告诉我完全它是什么会完成。

1 个答案:

答案 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"