このページで提案されている2番目の方法では、次のコマンドを使用してbashが実行されているttyを取得します。
ps ax | grep $$ | awk '{ print $2 }'
確かにこれは少し怠惰であり、実行中のすべてのプロセスをリストして、そのうちの1つを抽出するだけだと私は思います。行うのがより効率的ではないでしょうか(これが望ましくない効果をもたらすかどうかも尋ねています):
ps -p $$ | tail -n 1 | awk '{ print $2 }'
参考までに、最初のコマンドで実際に2行(またはそれ以上)の行が生成されることがあるため、この問題に遭遇しました。 $$
を含むPIDで実行されている別のプロセスがある場合、これはランダムに発生します。 部分文字列として。 2番目のアプローチでは、必要なことがわかっている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を除外して、醜い結果を1つだけ取得する必要があります。
ps ax | grep $$ | grep -v grep | awk '{ print $2 }'
または使用
ps ax | grep "^$$" | awk '{ print $2 }'
(より健全なバリアント)