En el segundo método propuesto por esta página, se obtiene el tty en el que se ejecuta bash con el comando:
ps ax | grep $$ | awk '{ print $2 }'
Pensé para mis adentros que seguramente esto es un poco vago, enumerar todos los procesos en ejecución solo para extraer uno de ellos. ¿No sería más eficiente (también pregunto si esto introduciría efectos no deseados) hacer:
ps -p $$ | tail -n 1 | awk '{ print $2 }'
FYI, me encontré con este problema porque a veces el primer comando en realidad producía dos (o más) líneas. Esto sucedería al azar, cuando habría otro proceso ejecutándose con un PID que contiene $$
como una subcadena. En el segundo enfoque, estoy evitando tales casos solicitando el PID que sé que quiero.
Respuesta aceptada:
Simplemente escribiendo tty
:
$ tty
/dev/pts/20
Demasiado simple y obvio para ser verdad 🙂
Editar: El primero te devuelve también el pty
del proceso que ejecuta grep
como puedes notar:
$ ps ax | grep $$
28295 pts/20 Ss 0:00 /bin/bash
29786 pts/20 S+ 0:00 grep --color=auto 28295
por lo tanto, necesitaría filtrar el grep para obtener solo un resultado, que se está poniendo feo:
ps ax | grep $$ | grep -v grep | awk '{ print $2 }'
o usando
ps ax | grep "^$$" | awk '{ print $2 }'
(una variante más cuerda)