Собрать выходные данные внешнего сценария в переменную в сценарии bash - PullRequest
1 голос
/ 23 января 2020

Я новичок в bash сценариях, но после попытки нескольких подходов к синтаксису и исследования, я немного застрял, сохраняя результат вызова внешнего сценария в моем bash сценарии. $ r не имеет видимого значения, когда я его повторяю ...

Из командной строки он работает как положено:

 ./external-prog 23334
 echo $?
 2
#!/bin/bash

# build the command
c="./external-prog 23334"

# invoke command that returns an integer value
eval "$c"

#collect result in $r
r=$(eval "$?")

#see result
echo $r

Ответы [ 3 ]

1 голос
/ 23 января 2020

Кажется, вы просто хотите запустить команду и получить ее возвращаемое значение, поэтому нет необходимости далеко eval:

#!/bin/bash

# run the command
./external-prog 23334

#collect result in $r
r=$?

#see result
echo $r
0 голосов
/ 23 января 2020

Эта последовательность $? вернет код ошибки последнего процесса, а не вывод. Проверьте это

$ echo ok; echo $?
ok
0

Первый эхо напечатало 'ok', а второе напечатало 0, что означает, что команда выполнена успешно. Код, отличный от 0, означает, что произошла какая-то ошибка.

Так что

 ./external-prog 23334
 echo $?
 2

означает, что external-prog не удалось, а код ошибки равен 2, что бы это ни значило. И чтобы перехватить вывод какой-либо команды в переменную, вам нужен

var=$(echo ok)
$ echo $var
ok
0 голосов
/ 23 января 2020

Вы можете сделать это, как показано ниже, сохраняя результат внешнего скрипта в переменной:

c=$(./external-prog 23334)   
echo $c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...