我正在尝试连接几个命令来提供文件路径。
我需要运行这个:
ls -l /proc/{PID}/fd/{FILE_NAME}
我可以通过运行以下命令获取 PID:
lsof | grep 'mysql\(.*\)deleted' | awk { print $2 }'
我可以通过运行以下命令获取文件名:
lsof | grep 'mysql\(.*\)deleted' | awk { print $10 } | cut -d'/' -f3
这两个命令都给了我很长的列表,但是我如何使用它们来生成 ls 命令的文件路径呢?
答案1
在 bash 中,可以使用数组:
#!/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
另一种可能性是从两个流中读取:
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)