首页 > 解决方案 > 使用 echo 和 cut 将命令输出分配给变量

问题描述

我必须制作一个比较 PID 和 PPID 的脚本,以了解谁生成了谁并制作一个输出日志,如“进程......生成进程......”它几乎完成了,但我不能只获取 PID 值将其存储到一个数组并进行比较,因为我以错误的方式使用命令替换 感谢大家会帮助我,并对文本感到抱歉,我是 bash 和这个地方的初学者

我的代码:

#!/bin/bash
IFS=$'\r\n'
GLOBIGNORE='*'
thispid=$$
ps -opid= -oppid= -ocommand= -c > processi.txt
eval  'array=($(<processi.txt))'
for i in "${array[@]}"
do
pid=$( echo "$i" | cut -d" " -f1 )
echo $pid
done

只有 ps 命令我有这样的输出:

 618   616 -bash
 2668   618 bash
 629   628 -bash
 1185   629 man
 1186  1185 sh
 1187  1186 sh
 1190  1187 sh
 1191  1190 less

我的问题在于 cut 命令的那一部分,因为这不起作用:

pid=$( echo "$i" | cut '-d" "' '-f1' )

标签: bashloopsprocessechocut

解决方案


尝试使用进程替换

pids=()
ppids=()

while read pid ppid _; do
    pids+=( $pid )
    ppids+=( $ppid )
done < <(ps -opid= -oppid= -ocommand= -c)

printf '%s\n' "${pids[@]}"
printf '%s\n' "${ppids[@]}"

推荐阅读