2013-03-21 40 views
0

我想一些替代进程数,找出它的命令行如下:带额外空白的Bash命令替换:如何解决这个问题?

> cat /proc/"`fuser /dev/ttyS0`"/cmdline 
cat: /proc/5231 /cmdline: No such file or directory 

但它看起来像fuser增加了一个额外的空白的PID。任何想法如何得到这个权利,或解决否则?

预期行为:我想使用fuser获取进程ID,并在第二步显示/proc/<id>/cmdline

+0

如果你唯一的问题是有额外的空白,你可以通过一个'sed'替代去掉空白吗? – drewmm 2013-03-21 07:41:13

+0

查看http://stackoverflow.com/questions/2854655/command-to-escape-a-string-in-bash – oikku 2013-03-21 07:41:30

+0

但是在我的Debian Squeeze上,'fuser/dev/tty1'输出'/ dev/tty1:1038' :) – pynexj 2013-03-21 08:16:57

回答

0

我认为echo \"`fuser /dev/ttyS0`\"会告诉你,有一个领先的空间。如果你在两个步骤分开你的操作,你可以做以下

u=`fuser /dev/ttyS0` 
cat /proc/${u// /}/cmdline 

所以,首先你的fuser结果赋值给变量u(这仍将包含空格),然后删除所有空格u (如果仅使用/只是第一次出现将被替换 - 在您的示例中这不会成为问题),则使用//开始替换模式替换所有出现的模式。

+2

或者就像这样:'u =($(fuser/dev/ttyS0)); cat/proc/$ u/cmdline' – pynexj 2013-03-21 08:10:25

+0

@clarkw:It works,nice!但它实际上做了什么? – chris 2013-03-21 08:15:46

+1

'arr =()'定义了一个索引数组。它会忽略前导/尾随未加引号的空格。 '$ arr' w/o下标与'$ {arr [0]}'相同。 – pynexj 2013-03-21 08:21:21