脚本 Bash : for 文件中的循环

Script Bash : lfor loop in file

我从这个命令尝试

ps axr -o pid,time,command | grep batch_file.php > /tmp/view-process

哪个returns我:

21861 00:13:30 php -q batch_file.php

在文件中 /tmp/view-process

之后,我 运行 这 3 个命令 :

PID=$(awk -F " " '{ print  }' /tmp/view-process)
TIME=$(awk -F " " '{ print  }' /tmp/view-process)
DIR=$(pwdx $PID > /tmp/view-process)
DIR=$(awk -F "/" '{ print  }' /tmp/view-process)

为了能够在变量$PID中只获取pid,在$TIME中只获取时间,在$DIR中只获取当前进程的路径

我尝试了几种方法来执行 for 循环或数组,以便在一行上仅显示 1 个 PID + DIR + TIME 并在第二行显示第二个 PID 等。

我只能通过这种方式做到这一点:21861 - proc_1 - 00:25:01(对于 1 个 pid,它可以工作,但是对于 2 个或更多,它不起作用。 显示如下:21861 23776 - proc_1 proc_2 - 00:12:02

因此我找不到如何使用 for 循环和我的文件来得到我的结果

你有什么想法吗?

让我们在没有临时文件的情况下执行此操作。

我将使用 bash 关联数组和进程替换

declare -A times dirs

while read -r pid time cmd; do
    times[$pid]=$time
done < <(
    ps axr -o pid,time,command | grep batch_file.php
)

while IFS=': /' read -r pid _ _ _ _ _ dir _; do
    dirs[$pid]=$dir
done < <(
    pwdx "${!times[@]}"
)

for pid in "${!times[@]}"; do
    echo "$pid - ${times[$pid]} - ${dirs[$pid]}"
done