我正在使用#!/bin/sh -x
在DASH SHELL中调试脚本,我想在调试时显示脚本行号。
已经尝试更改PS4变量(如this answer所示),但没有成功,因为它仅适用于bash,我需要shell。
PS4='Line ${LINENO}: '
我期望以下输出:
123: + echo test
但是外壳$LINENO
中什么也没有。
我正在使用ubuntu 16.04 x64和破折号版本0.5.8-2.1ubuntu2 500
具体地说,我正在尝试调试Virtualbox配置文件以在Linux上构建它。 这是脚本的一些部分以及我的尝试方法。
#!/bin/sh -x
PS4='Line ${LINENO}: '
LC_ALL=C
export LC_ALL
# append some extra paths
PATH="$PATH:/opt/gnome/bin"
# Solaris (order of paths important for tr, grep, sed to work)
PATH="/usr/xpg4/bin:$PATH:/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin"
ORGPATH=$PATH
...
echo " disabled hardening!"
echo " +++ WARNING +++ WARNING +++ WARNING +++ WARNING +++ WARNING +++ WARNING +++"
echo ""
fi
echo "Enjoy!"
cleanup
结果是:
Line : [ 1 -ne 0 ]
Line : test -z nofatal
Line : echo
Line : echo
Line : return 1
答案 0 :(得分:1)
POSIX标准的“用户可移植性实用程序”附件中已经要求此处讨论的所有功能。
此外,破折号是Linux上最常见的非bash /bin/sh
实现,已经内置了功能,您可以在下面进行测试:
dash -s <<'EOF'
PS4=':$LINENO+'; set -x
echo "First line"
echo "Second line"
EOF
...正确发射(带有破折号0.5.10.2):
:2+echo First line
First line
:3+echo Second line
Second line