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.