Eval для интерпретации новых строк в Bash - PullRequest
0 голосов
/ 31 мая 2019

У меня есть ранее запущенная команда $cmd, эта команда выводит несколько строк.

Я хотел бы получить строку вывода nth при запуске отредактированной версии $cmd.

До сих пор я пробовал:

local -a lines

for line in $(eval "$(some_edit $cmd)");do
  lines+=("$line")
done

echo "${lines[$nth_line]}"

Я всегда echo все, когда $nth_line равно 1 и ничего для больших целых чисел.

У меня всегда есть $linesбудучи массивом из одной строки - это все строки.

Я пробовал комбинации ", но безрезультатно.

1 Ответ

2 голосов
/ 31 мая 2019

Не знаю, правильно ли я вас понял - вы имеете в виду что-то подобное?

#!/bin/bash
cmd="./script.sh"

# read stdout from $cmd into array lines
readarray lines < <($cmd)

# edit the second line
lines[1]=$'version: 0.99\n'

# loop over array and print lines
for line in "${lines[@]}"; do
   printf "%s" "$line"
done

тестовый скрипт для симуляции $ cmd

#!/bin/bash
echo "start"
echo
echo "do something"
echo
echo "end"

выход

start
version: 0.99
do something

end
...