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 mí mismo que seguramente esto es un poco vago, enumerando 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) para hacer:
ps -p $$ | tail -n 1 | awk '{ print $2 }'Para su información, me encontré con este problema porque a veces el primer comando en realidad producirí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, evito tales casos al solicitar el PID que sé que quiero.

ttycomando dentro de su sesión bash. Si insiste en usarps-ps -p $$ -o tty=Respuestas:
Simplemente escribiendo
tty:Demasiado simple y obvio para ser verdad :)
Editar: el primero le devuelve también
ptyel proceso en ejecución,grepcomo puede notar:por lo tanto, necesitaría filtrar el grep para obtener solo un resultado, que se está poniendo feo:
o usando
(una variante más sensata)
fuente
tty | sed -e "s:/dev/::"). Pero creo que la segunda solución sugerida en esa página no solo es ineficiente, ¡sino también incorrecta! Sinttyembargo, usaré y dejaré de quejarme. :)ptyel proceso en ejecucióngrepcomo puede notar.grepsi lo estás usandoawk. por ejemplops ax | awk "/^$$/ {print \$2}", tenga en cuenta el uso de comillas dobles en lugar de comillas simples y el escape\$2. Pero, como dices, usarttyes la solución correcta.awk -vpid=$$ '$1 == pid {print $2}'ttyen node.js no funciona en absoluto, mientras que lospsamigos funcionan bien.Si desea ser más eficiente, entonces sí, tiene razón y
pspuede filtrar solo el proceso en cuestión (y será más correcto, no correrá el riesgo de recoger comandos que tienen su número de proceso en sus nombres) ) No solo eso, sino que se le puede decir que no genere el encabezado (opciónh), eliminando eltailproceso, y que muestre solo elTTYcampo (opcióno tty), eliminando elawkproceso.Así que aquí está tu comando reducido:
fuente
Otras formas de hacerlo:
(Si está en un shell cuyo stdin, stdout y stderr no están conectados a su terminal de control, puede obtener un descriptor de archivo al terminal de control abriendo
/dev/tty:)
O con
ps:fuente
/dev/tty, y no el tty controlador (según lo informado porps). (2) Creo que{ readlink /dev/fd/0; } < /dev/ttyes (y siempre será) equivalente areadlink /dev/fd/0 < /dev/tty: ¿cree usted lo contrario? Si es así, ¿puedes justificarlo? (3) El segundo punto y coma en su comando (el siguiente/dev/tty) es innecesario.Solo para completar, mientras que los otros comandos ps mencionados funcionan en Linux,
ps -p $$ -o tty=(como se menciona en @ 1_CR) es el más portátil para todos los sistemas Unix modernos, ya que utiliza solo las opciones definidas en el Estándar Unix .fuente
En el shell interactivo, uno podría usar el
wcomando para eso. En el siguiente ejemplo, sewinforma que un usuario específico lo ejecuta y, por supuesto, muestra a TTY dónde se ejecuta ese comando.fuente