Estoy tratando de obtener el nombre del intérprete ejecutando un guión.Salida de tubería para cortar
¿Por qué
echo $(ps | grep $PPID) | cut -d" " -f4
trabajo mientras
echo ps | grep $PPID | cut -d" " -f4
no?
Estoy tratando de obtener el nombre del intérprete ejecutando un guión.Salida de tubería para cortar
¿Por qué
echo $(ps | grep $PPID) | cut -d" " -f4
trabajo mientras
echo ps | grep $PPID | cut -d" " -f4
no?
La razón es que
echo ps
simplemente imprime la cadena de ps
; no ejecuta el programa ps
. La versión corregida de su comando sería:
ps | grep $PPID | cut -d" " -f4
Editado para añadir: paxdiablo señala que ps | grep $PPID
incluye una gran cantidad de espacio en blanco que va a quedar colapsado por echo $(ps | grep $PPID)
(ya que el resultado de $(...)
, cuando no está en doble -quotes, se divide por espacios en blanco en argumentos separados, y luego echo
muestra todos sus argumentos separados por espacios). Para hacer frente a esto, se puede utilizar tr
a "exprimir" espacios repetidos:
ps | grep $PPID | tr -s ' ' | cut -d' ' -f5
o simplemente puede seguir con lo que había que empezar. :-)
Creo que si se ejecuta solo echo ps
por su propia cuenta, verá por qué su tubería no funciona:
$ echo ps
ps
En su lugar, comprobar $0
. Tenga en cuenta que podría ser -bash
o bash
, dependiendo de si es un shell de inicio de sesión . (Bueno, cualquier shell - no solo bash
- pero se agrega guion si el shell es un shell de inicio de sesión.)
La primera línea:
echo $(ps | grep $PPID) | cut -d" " -f4
dice:
ps | grep $PPID
en un sub-shelldevolver la salida - que será algo como esto:
3559 pts/1 00:00:00 bash
y luego use esa salida como primer parámetro de eco - la cual, en la práctica, significa simplemente eco de la salida
cut -d" " -f4
en que - que le da el nombre del comando, en este casoEl segundo comando:
echo ps | grep $PPID | cut -d" " -f4
dice: cadena
ps
$PPID
- esto nunca devolverá nada, ya que $PPID
contiene un número, por lo que nunca será ps
. Por lo tanto, grep devuelve nadacut -d" " -f4
con la entrada de la orden anterior - que no es nada, por lo que no reciben nada
Por alguna razón, echo $ (ps | grep $ PPID) | cut -d "" -f4 me dará "bash" mientras ps | grep $ PPID | cut -d "" -f4 solo me da un espacio vacío – ZPS
No del todo. La primera versión tiene el efecto adicional de colapso de espacios. – paxdiablo
¡Awwwww tienes razón! gracias – ZPS