使用echo和cut将命令输出分配给变量

时间:2018-08-29 11:50:36

标签: bash loops process 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' )

1 个答案:

答案 0 :(得分:0)

使用process substitution进行尝试:

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[@]}"