如果你的ps
版本支持它,你最好重新格式化它的輸出以便於解析。在我的系統上,我可以這樣做:
$ ps -o command= -C Xvnc
Xvnc :1
$ ps_output="$(ps -o command= -C Xvnc)"
$ vnc_display="${ps_output#Xvnc :}"
$ echo $vnc_display
1
當然這種方法有一些限制。它不會選擇特定的用戶,如果您使用Xnc
的其他命令行選項,或者您有多個會話正在運行,它將不起作用。因此,相反,你可能想要做這樣的事情:
$ grep -z "^:" "/proc/$(pgrep -u user Xvnc)/cmdline"
:1
設置與命令替換參數,然後去除可能結腸,如果這就是你想要的。如果單個用戶正在運行多個VNC會話,這仍然不起作用。您必須改寫$(pgrep -u user Xvnc)
的結果。如果你不關心漂亮解析輸出,因爲人是無論如何處理的結果,你總是可以只是這樣做:
$ ps $(pgrep -u user Xvnc)
PID TTY STAT TIME COMMAND
3600 pts/2 S 0:00 Xvnc :2
3606 pts/2 S 0:00 Xvnc :3
其工作原理是通過運行pgrep
命令,這將會對搜索過程符合指定標準(在這種情況下,用戶名爲user
,命令名稱爲Xvnc
)。下面是它的輸出是什麼樣子:
$ pgrep -u user Xvnc
3600
3606
Encosing這$(
和)
配合外殼的命令替換設備。這需要輸出一個命令並將其替換爲命令行的一部分。 (運行info "(bash)Command Substitution"
)瞭解更多信息)。當您運行ps $(pgrep -u user Xvnc)
,它使得shell將其解釋爲這樣:
$ ps 3600 3606
這將產生相同的輸出。你可以看到什麼是bash做的,如果你使用set -x
調試選項:
$ set -x
$ ps $(pgrep -u user Xvnc)
++ pgrep -u user Xvnc
+ ps 3600 3606
PID TTY STAT TIME COMMAND
3600 pts/2 S 0:00 Xvnc :2
3606 pts/2 S 0:00 Xvnc :3
請示出了樣品第一個命令的輸出以及它所需的輸出。 –
通過「會話號碼」,你的意思是像「:2」「:3」之類的東西? (X顯示號碼?) – BRFennPocock