Bei der zweiten Methode, die auf dieser Seite vorgeschlagen wird, erhält man das tty, in dem bash ausgeführt wird, mit dem Befehl:
ps ax | grep $$ | awk '{ print $2 }'
Ich dachte mir, dass das sicherlich ein bisschen faul ist, alle laufenden Prozesse aufzulisten, nur um einen davon zu extrahieren. Wäre es nicht effizienter (ich frage auch, ob dies zu unerwünschten Effekten führen würde):
ps -p $$ | tail -n 1 | awk '{ print $2 }'
Zu Ihrer Information, ich bin auf dieses Problem gestoßen, weil der erste Befehl manchmal tatsächlich zwei (oder mehr) Zeilen ergab. Dies würde zufällig passieren, wenn ein anderer Prozess mit einer PID läuft, die $$
enthält als Teilstring. Beim zweiten Ansatz vermeide ich solche Fälle, indem ich die PID anfordere, von der ich weiß, dass ich sie haben möchte.
Akzeptierte Antwort:
Einfach durch Eingabe von tty
:
$ tty
/dev/pts/20
Zu einfach und offensichtlich, um wahr zu sein 🙂
Bearbeiten: Der erste gibt Ihnen auch den pty
zurück des Prozesses, der grep
ausführt wie Sie sehen können:
$ ps ax | grep $$
28295 pts/20 Ss 0:00 /bin/bash
29786 pts/20 S+ 0:00 grep --color=auto 28295
Daher müssten Sie grep herausfiltern, um nur ein Ergebnis zu erhalten, was hässlich wird:
ps ax | grep $$ | grep -v grep | awk '{ print $2 }'
oder mit
ps ax | grep "^$$" | awk '{ print $2 }'
(eine vernünftigere Variante)