Bash
如何獲取執行 bash 的 tty?
在此頁面提出的第二種方法中,使用以下命令獲取正在執行 bash 的 tty:
ps ax | grep $$ | awk '{ print $2 }'
我對自己說這肯定有點懶惰,列出所有正在執行的程序只是為了提取其中一個。這樣做會不會更有效率(我也在問這是否會引入不必要的影響):
ps -p $$ | tail -n 1 | awk '{ print $2 }'
僅供參考,我遇到了這個問題,因為有時第一個命令實際上會產生兩行(或更多行)。這將隨機發生,當將有另一個程序以包含
$$
作為子字元串的 PID 執行時。在第二種方法中,我通過請求我知道我想要的 PID 來避免這種情況。
只需鍵入
tty
:$ tty /dev/pts/20
太簡單太明顯了:)
**編輯:**如您所見,第一個還返回您
pty
正在執行的程序grep
:$ ps ax | grep $$ 28295 pts/20 Ss 0:00 /bin/bash 29786 pts/20 S+ 0:00 grep --color=auto 28295
因此,您需要過濾掉 grep 以僅獲得一個結果,這越來越難看:
ps ax | grep $$ | grep -v grep | awk '{ print $2 }'
或使用
ps ax | grep "^$$" | awk '{ print $2 }'
(一個更理智的變體)
如果您想提高效率,那麼是的,您是對的,
ps
可以過濾到有問題的程序(這將更正確,不會冒著選擇名稱中恰好包含您的程序號的命令的風險)。不僅如此,還可以告訴它不生成表頭(optionh
),去掉tail
程序,只顯示TTY
欄位(optiono tty
),去掉awk
程序。所以這是你的簡化命令:
ps hotty $$