Как использовать оболочку fi sh для чтения нескольких строк вывода в одну переменную? - PullRequest
0 голосов
/ 03 апреля 2020

Я думаю, что неправильно понимаю использование read в fi sh для извлечения многострочного ввода. Вот мой базовый c скрипт:

~> ps -aux | grep python | awk '/anaconda2/ {print $2,$9}'
3113 10:11
6079 10:20
12266 14:06
14648 Apr01
23460 Apr01
23984 Apr01
25064 Apr01
27110 00:10

Я хочу прочитать это в одну переменную с read --list --line, но вместо этого я просто получаю первую строку данных:

~> 
ps -aux | grep python | awk '/anaconda2/ {print $2,$9}' | read -l --list --line pids_starts
~> echo $pids_starts
3113 10:11

Если я использую read -z, я получаю все значения, но они разбиваются на отдельные переменные:

~> ps -aux | grep python | awk '/anaconda2/ {print $2,$9}' | read -l --list -z pids_starts
~> echo $pids_starts
3113 10:11 6079 10:20 12504 14:13 14648 Apr01 23460 Apr01 23984 Apr01 25064 Apr01 27110 00:10
~> count $pids_starts
16
~> echo $pids_starts[1]  
3113

Как получить для каждой строки выходных данных отдельный элемент массива с read? Я также считаю, что я неправильно понимаю, как AWK ограничивает вывод, но я не уверен.

Спасибо!

1 Ответ

2 голосов
/ 03 апреля 2020

Подстановки команд разделяются на новые строки, поэтому просто сделайте это:

set -l pids_starts (ps -aux | grep python | awk '/anaconda2/ {print $2,$9}')

(ps -aux должно быть ps aux в моей системе, но YMMV) * ​​1006 *

...