Назначьте вывод команды переменной с помощью echo и cut - PullRequest
0 голосов
/ 29 августа 2018

Мне нужно создать скрипт, который сравнивает PID и PPID, чтобы понять, кто кого генерирует, и сделать журнал вывода вроде "процесс ... генерирует процесс ..." это почти сделано, но Я не могу получить только значение PID, чтобы сохранить его в массиве и сделать сравнение, потому что я использую подстановку команд неправильно Спасибо всем, помогите мне и извините за текст, я начинающий Баш и этого места

мой код:

#!/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 голосов
/ 29 августа 2018

Попробуйте, используя процесс замены :

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