Bash

如何獲取執行 bash 的 tty?

  • May 11, 2021

此頁面提出的第二種方法中,使用以下命令獲取正在執行 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可以過濾到有問題的程序(這將更正確,不會冒著選擇名稱中恰好包含您的程序號的命令的風險)。不僅如此,還可以告訴它不生成表頭(option h),去掉tail程序,只顯示TTY欄位(option o tty),去掉awk程序。

所以這是你的簡化命令:

ps hotty $$

引用自:https://unix.stackexchange.com/questions/270272