我可以在不修改源代码的情况下跟踪破折号脚本吗?

Chr*_*urm 5 shell dash shell-script

我想跟踪一个 shell 脚本以进行调试,而不必修改其源代码(例如,更改 shebang 或set -x在开头插入 a )。它是一个 dpkg postinst 脚本,所以实际上并不是我自己在 shell 上调用的。

希望为此找到一个环境变量,我在手册页中搜索了dash,但找不到任何内容。

有没有办法做到这一点?

ang*_*gus 4

由于您拥有超级用户访问权限,因此您只需更改/bin/sh. 当然,您会影响任何想要使用默认 shell 的内容(例如 cron 脚本),因此请尝试尽快恢复它。

首先,创建包装器。mysh在您的主目录中创建一个以此内容命名的文件:

#!/bin/dash
exec /bin/dash -x "$@"
Run Code Online (Sandbox Code Playgroud)

使其可执行。

$ chmod +x ~/mysh
Run Code Online (Sandbox Code Playgroud)

然后改变/bin/sh。首先,请务必记下它指向的位置

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 9 Jan 12 17:42 /bin/sh -> /bin/dash
Run Code Online (Sandbox Code Playgroud)

然后,肆无忌惮地改变它。(警告:当您的系统没有 时,将会有一小部分微秒/bin/sh。)

$ sudo ln -sf ~/mysh /bin/sh
Run Code Online (Sandbox Code Playgroud)

一旦你完成了你的事情,就恢复它。

$ sudo ln -sf /bin/dash /bin/sh
Run Code Online (Sandbox Code Playgroud)

祝你好运!