Bash pwdx的管道输入

Bash pwdx的管道输入,bash,Bash,我试图理解为什么这个获取最密集流程的工作目录的一行程序不起作用 top -n 1 | grep -A 1 PID | tail -1 | cut -d' ' -f1 | xargs pwdx pwdx: invalid process id: 13620 当这发生的时候 echo 13620 | xargs pwdx 13620: /correct/working/directory 在第一个示例中,通过管道传输到xargs的输出PID中没有任何尾随/前导空格,但它仍然无法将其识别为有效的P

我试图理解为什么这个获取最密集流程的工作目录的一行程序不起作用

top -n 1 | grep -A 1 PID | tail -1 | cut -d' ' -f1 | xargs pwdx
pwdx: invalid process id: 13620
当这发生的时候

echo 13620 | xargs pwdx
13620: /correct/working/directory

在第一个示例中,通过管道传输到xargs的输出PID中没有任何尾随/前导空格,但它仍然无法将其识别为有效的PID。有人有什么建议吗?

调整剪切命令,使用-b(计算输出字节并调整选项)选项,而不是不可靠的-f选项

top -n 1 | grep -A 1 PID | tail -1  | cut -b11-12 | xargs pwdx

Top的输出包含特殊字符:

top -n 1 | grep -A1 PID | tail -1 | cut -d' ' -f1 | xargs echo | cat -v
^[(B^[[m^[(B^[[m41039
其中41039是pid

使用grep或类似方法过滤掉坏字符,id也使用awk获取第一个字段

top -n 1 | grep -A1 PID | tail -1 | awk '{print $1}' | grep -o -E '[0-9]+' | xargs pwdx

非常有趣,但我无法再现
top-n1 | grep-a1pid | tail-1 | cut-d''-f1
本身显示了什么?这通常不起作用<代码>顶部列出空间填充PID。这意味着它列出的是
sss1
(s是一个空格),而不是
0001
,当您将其输送到
cut-d'-f1
时,它将返回一个空字符串。(我知道你提到没有前导空格,但我只是想让那些不理解你意思的人明白这点。)@ArkadiuszDrabczyk,它给出的字符串13620没有前导或尾随whitespace@Quasímodo这是一个很好的观点,但我仍然不明白为什么它在这个具体案例中不起作用