bash - 使用 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' )
解决方案
尝试使用进程替换:
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[@]}"
推荐阅读
- react-native - React-Native WebView 阻止父 TouchableOpacity 上的 onPress
- r - 传播数据并计算 RMSE
- css - 当元素没有某个类的祖先时,如何有选择地应用 CSS
- vim - vim 在 tmux 中用 Cs 冻结
- html - /和_在html中是什么意思?
- c# - 如何通过 LiteDB.LiteCollection 迭代大型 litedb 数据库文件中的特定键值
- azure - 部署 Microsoft Azure 的 FACE API 时如何修复错误
- webview - 如何从资产加载完整的网站?
- nutch - 如何解决运行 Nutch 1.15 ERROR fetcher.Fetcher - Fetcher 作业未成功,作业状态:FAILED,原因:NA 的此错误
- php - 回声问题,循环 4 次