在我的示例中,我开始输入sudo su dkay
... <tab>
... 并且该命令在选项卡完成之前挂起大约一分钟sudo su dkayton
。
我被建议使用 strace 来找出发生了什么。
关于如何将制表符完成的底层命令传递给 strace 的任何想法?
我尝试了什么:
我top
在一个 shell 中运行以监视进程。sudo su dkay
然后我在另一个外壳中立即点击标签。
然后,我尽可能快地复制了 bash 进程的 PID,这导致sudo strace -pXXX -tfo /tmp/strace.log
了第三个 shell,其中 XXX 是复制的 PID。
它仍然设法捕获超过 2mb 的日志。我重复了两次,第二次更成功。
我正在寻找一种更自动的方式来完成这项工作。
(假设您使用的是 Linux)
echo $$
用于获取当前 shell 的 PID。打开一个新终端,然后运行:切换回旧 shell,尝试 tab 补全。然后切换到新终端并按CtrlC结束
strace
。输出将在名为log
.strace
您还可以在同一个 shell 中运行该命令(首先进行身份验证以sudo
缓存凭据):然后尝试制表符完成。要杀死它,
fg
,然后是CtrlC。但是,如果您使用的是 bash,最好先尝试从中获取详细的调试输出:
然后尝试制表符完成。您应该在随后的输出中执行完成函数的所有内容。例如: