Eu sei que isso deve ter sido perguntado antes, eu não tinha certeza do que procurar exatamente, então desculpe a pergunta duplicada.
Como alguém 'puxa' uma variável para o lugar certo quando canalizada de um comando anterior? Estou tentando encontrar um PID, encontrar arquivos abertos relacionados a esse PID, reduzi-lo a um arquivo e executar um comando nesse arquivo. Aqui está o comando:
ps x | grep IINA | grep -v grep | awk '{print $1}'
Ok, isso me dá um PID, ótimo. Agora eu quero lsof -p
esse PID, mas não posso simplesmente fazer ps x | grep IINA | grep -v grep | awk '{print $1}' | lsof -p
.
Sem fazer ps x | grep IINA | grep -v grep | lsof -p 'awk '{print $1}''
(novamente, desculpe os backticks incorretos), como posso fazer o que estou tentando fazer?
O
lsof
utilitário espera o PID na linha de comando, não em sua entrada padrão.Você pode usar
Isso será executado
pgrep
comIINA
seu argumento, e a saída disso será entreguelsof
como um argumento de opção para a-p
opção usando uma substituição de comando.Se
IINA
não for o nome do comando, mas uma parte da linha de comando usada para iniciar o processo, adicione o-f
sinalizador apgrep
.Se você obtiver várias ocorrências
pgrep
, talvez queira usar-n
(obtém o processo de correspondência iniciado mais recentemente) ou-o
(obtém o processo de correspondência mais antigo), se suapgrep
implementação suportar isso, ou você pode usarpara criar uma lista delimitada por vírgulas de PIDs para
lsof -p
.