tentando concatenar comandos para fornecer um caminho de arquivo

tentando concatenar comandos para fornecer um caminho de arquivo

Estou tentando concatenar vários comandos para fornecer um caminho de arquivo.

Eu preciso executar isso:

ls -l /proc/{PID}/fd/{FILE_NAME}

Posso obter o PID executando:

lsof | grep 'mysql\(.*\)deleted' | awk { print $2 }'

E posso obter o nome do arquivo executando:

lsof | grep 'mysql\(.*\)deleted' | awk { print $10 } | cut -d'/' -f3

Ambos me fornecem listas longas e agradáveis, mas como posso usá-los para gerar o caminho do arquivo para o comando ls?

Responder1

No bash, você pode usar matrizes:

#!/bin/bash
pids=( $(lsof | grep 'mysql.*deleted' | awk '{ print $2 }') )
files=( $(lsof | grep 'mysql.*deleted' | awk '{ print $10 }' | cut -d/ -f3) )
for ((i=0; i<${#pids[@]}; i++)) ; do
    ls -l /proc/${pids[i]/fd/${files[i]}
done

Outra possibilidade seria ler de dois fluxos:

while read pid ; do
    read file <&3
    ls -l /proc/$pid/fd$file
done < <(lsof | grep 'mysql.*deleted' | awk '{ print $2 }') \
     3< <(lsof | grep 'mysql.*deleted' | awk '{ print $10 }' | cut -d'/' -f3)

informação relacionada