Получение двух переменных из вывода команды за один запуск - PullRequest
0 голосов
/ 06 января 2020

Я строю скрипт в bash для использования на Linux, и я использую вывод исполняемого файла для заполнения параметров:

version=$("${path_exec}" -version | awk '{if($1=="kernel" && $2=="release") print $3}')
patch=$("${path_exec}" -version | awk '{if($1=="patch" && $2=="number") print $3}')

Это запустит исполняемый файл, определенный в "path_exe" c "дважды, что отнимает много времени. Есть ли способ присвоить версии и переменной пути значение, используя только одно выполнение «path_exe c»?

Пример того, что я пытался решить, показан ниже, но я не думаю, что это будет делать то, что я хочу:

${path_hostexec} -version | awk '{if($1=="kernel" && $2=="release") {version_agent = $3;} else if($1=="patch" && $2=="number") {patch_agent = $3;}}'

Ответы [ 3 ]

0 голосов
/ 06 января 2020

Выведите оба значения в одну строку, и пусть read разделит строку на две части.

IFS=, read version patch < <($path_exec -version |
                             awk '/kernel release/ {v=$3}
                                  /patch number/ {p=$3}
                                  END {print v","p}
                                 ')
0 голосов
/ 24 января 2020

Спасибо, ребята, мне удалось заставить его работать благодаря вашему вводу:

version_patch_agent=$("${path_hostexec}" -version | awk '/kernel release/ {v=$3} /patch number/ {p=$3} END {print v" patch "p}')

Это помещает номер версии и патча в переменную, которую я могу просто вывести, чтобы получить информацию на экране , Еще раз спасибо всем!

0 голосов
/ 06 января 2020

Не могли бы вы попробовать следующее. Поскольку у меня не было вывода команды path_exec, поэтому я не смог ее проверить.

myarr=($("${path_exec}" -version | awk '{if($1=="kernel" && $2=="release");val=$3} {if($1=="patch" && $2=="number") print val,$3}'))
#Now get every element in the array
for i in "${myarr[@]}"
do
  echo $i
done

Я сделал следующее:

  • Слил обе ваши awk программы в одну, чтобы она запускалась за один раз.
  • Теперь создаем массив путем вывода awk вывода команды (который должен быть val1 val2 как пример формата)
  • После создания массива мы можем получить все его значения по for l oop или вы можете получить его значение c, указав его индекс, например -> myarr[1] для печать 2-го элемента.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...