脚本 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
我从这个命令尝试
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