2013-03-21 36 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