現在実行中のシェルまたはターミナルウィンドウの数を数えようとしています。
頑張ったps a|grep bash;
ps a|grep tty;
しかし、正確ではないかもしれません。
答え1
ls /dev/pts/ | wc -l
上記のコマンドを使用して、開いている端末ウィンドウの数を計算します。
答え2
リストを作成してください。
ps aux | awk '{print $7}' | grep -v "?"
カウントしてください:
ps aux | awk '{print $7}' | grep -v "?" | wc -l
この数字には最上位のTTYヘッダーが含まれているため、この数字から1を引く必要があります。
これは、すべて実行中のサブシェルの数を数えるか、開いている端末ウィンドウの数を数えるかによって異なります。
端末ウィンドウのみを計算するには、以下を使用する必要があります。
ls /dev/pts/ | wc -l (stated in a previous answer)
たとえば、
私のシステムには現在6つのttyを使用できます。また、fgまたはbgで実行される4つのプロセスを持つオープンターミナルpts / 0があります。
root 4565 0.0 0.0 4060 576 tty1 Ss+ May01 0:00 /sbin/mingetty /dev/tty1
root 4567 0.0 0.0 4060 572 tty2 Ss+ May01 0:00 /sbin/mingetty /dev/tty2
root 4569 0.0 0.0 4060 568 tty3 Ss+ May01 0:00 /sbin/mingetty /dev/tty3
root 4571 0.0 0.0 4060 576 tty4 Ss+ May01 0:00 /sbin/mingetty /dev/tty4
root 4573 0.0 0.0 4060 576 tty5 Ss+ May01 0:00 /sbin/mingetty /dev/tty5
root 4575 0.0 0.0 4060 572 tty6 Ss+ May01 0:00 /sbin/mingetty /dev/tty6
me 17482 0.0 0.0 110236 1136 pts/0 R+ 11:36 0:00 ps aux
root 20374 0.0 0.0 108336 1816 pts/0 Ss May23 0:00 -bash
root 20953 0.0 0.1 161436 1960 pts/0 S May23 0:00 su - me
me 20954 0.0 0.1 108524 1984 pts/0 S May23 0:00 -bash
バックグラウンドサブプロセスを削除するには、uniqにパイプするだけです。
ps aux | awk '{print $7}' | grep -v "?" | uniq | wc -l
それでもTTYヘッダーから1を引く必要がありますが、気にしないように見えるので、ttyを完全に削除してこれをさらに改善することができます。
ps aux | awk '{print $7}' | grep -v "?" | grep -vi "tty*" | uniq
これにより正確な数値がわかります。
編集する
より多くの「ps -a」を考慮する方が良いですが、最初のgrepを省略できます。
ps a | awk '{print $2}' | grep -vi "tty*" | uniq | wc -l
答え3
macOSでは、次のものを使用できます。
cnt=$(w -h | grep "^$(whoami) *s[^ ]* *-"|wc -l)
echo "Your current terminal sessions: $cnt"
答え4
\l
PS1変数にこのオプションを追加できます。たとえば、次のようになります。
export PS1="terminal #\l \W \$ "
これにより、端末を最初から計算します。
詳細については、次を参照してください。GNUウェブサイト。
お役に立てば幸いです。