У меня есть оболочка script "script.sh", которая дает результат как "успех" или "сбой", когда я выполняю в окне unix.
Теперь я хочу сохранить вывод script.sh в командную переменную unix. say $a = {output of script.sh}
Как сохранить вывод оболочки script переменной в Unix?
Ответ 1
Два простых примера для захвата вывода команды pwd
:
$ b=$(pwd)
$ echo $b
/home/user1
или
$ a=`pwd`
$ echo $a
/home/user1
Первый способ является предпочтительным. Обратите внимание, что после =
для этого не должно быть пробелов.
Пример использования короткого script:
#!/bin/bash
echo "hi there"
то
$ ./so.sh
hi there
$ a=$(so.sh)
$ echo $a
hi there
В целом более гибким подходом было бы вернуть значение выхода из этой команды и использовать его для дальнейшей обработки, хотя иногда нам просто захочется захватить простой вывод из команды.
Ответ 2
Вероятно, вы должны переписать script, чтобы вернуть значение, а не выводить его. Вместо:
a=$( script.sh ) # Now a is a string, either "success" or "Failed"
case "$a" in
success) echo script succeeded;;
Failed) echo script failed;;
esac
вы могли бы сделать:
if script.sh > /dev/null; then
echo script succeeded
else
echo script failed
fi
Для других программ гораздо проще работать с вами script, если им не нужно разбирать вывод. Это простое изменение. Просто exit 0
вместо печати success
и exit 1
вместо печати Failed
. Конечно, вы также можете распечатать эти значения, а также выйти с разумным возвращаемым значением, чтобы сценарии-оболочки имели гибкость в том, как они работают с script.
Ответ 3
export a=$(script.sh)
Надеюсь, это поможет. Обратите внимание, что между переменной и = нет пробелов. Чтобы повторить вывод
echo $a
Ответ 4
Предположим, что вы хотите сохранить результат команды эха
echo hello
x=$(echo hello)
echo "$x",world!
вывод:
hello
hello,world!
Ответ 5
Вам нужно запустить script с предыдущей точкой, это поместит экспортированные переменные в текущую среду.
#!/bin/bash
...
export output="SUCCESS"
Затем выполните его так:
chmod +x /tmp/test.sh
. /tmp/test.sh
Когда вам нужен весь вывод, а не только одно значение, просто поместите вывод в переменную, как и другие ответы, укажите