intentando concatenar comandos para dar una ruta de archivo

intentando concatenar comandos para dar una ruta de archivo

Estoy intentando concatenar varios comandos para proporcionar una ruta de archivo.

Necesito ejecutar esto:

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

Puedo obtener el PID ejecutando:

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

Y puedo obtener el nombre del archivo ejecutando:

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

Ambos me dan listas largas y bonitas, pero ¿cómo puedo usarlas para generar la ruta del archivo para el comando ls?

Respuesta1

En bash, puedes usar matrices:

#!/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

Otra posibilidad sería leer desde dos corrientes:

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)

información relacionada