我想跟踪 shell 脚本以进行调试,而无需修改其源代码(例如更改 shebang 或set -x
在开头插入 a )。它是一个 dpkg postinst 脚本,所以实际上不是我自己在 shell 上调用的。
为了找到为此的环境变量,我在手册页中搜索了dash
,但找不到任何内容。
有什么方法可以做到这一点吗?
答案1
由于您拥有超级用户访问权限,因此您只需更改/bin/sh
.当然,您会影响任何想要使用默认 shell 的内容(例如 cron 脚本),因此请尝试尽快恢复它。
首先,创建包装器。在您的主目录中创建一个mysh
以此内容命名的文件:
#!/bin/dash
exec /bin/dash -x "$@"
使其可执行。
$ chmod +x ~/mysh
然后改变/bin/sh
。首先,请务必记下它指向的位置
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 9 Jan 12 17:42 /bin/sh -> /bin/dash
然后,肆无忌惮地改变它。 (警告:当您的系统没有 时,将会有一小部分微秒/bin/sh
。)
$ sudo ln -sf ~/mysh /bin/sh
一旦你完成了你的事情,就恢复它。
$ sudo ln -sf /bin/dash /bin/sh
祝你好运!
答案2
您可以-x
在调用命令本身中使用该标志:
sh -x ./script