Com sed
, POSIXly:
var=$(
ps -Ao args= | sed -n 's|.* -h:\(.*\)/component_events\.xml.*||p'
)
Na verdade, isso retorna a parte da linha de comando entre a última ocorrência de /component_events.xml
e a última ocorrência antes de -h:
.
Então, se a linha de comando for:
... -h:x/component_events.xml -g:y/component_events.xml
Você obteria x/components_events.xml -g:y
em vez de x
.
Você pode alterá-lo para sed -n 's|.* -h:\([^ ]*\)/component_events\.xml.*||p'
para evitar isso, mas isso não será mais para nomes de diretório que contenham caracteres de espaço.
Em um sistema GNU / Linux recente, você também pode fazer:
LC_ALL=C grep -zhPo '^-h:\K.*(?=/component_events\.xml)' /proc/*/cmdline |
tr 'var=$(
ps -Ao args= | sed -n 's|.* -h:\(.*\)/component_events\.xml.*||p'
)
' '\n'
O que funcionaria para qualquer nome de diretório.