Подтвердить что ты не робот

Как сохранить вывод оболочки script переменной в Unix?

У меня есть оболочка script "script.sh", которая дает результат как "успех" или "сбой", когда я выполняю в окне unix. Теперь я хочу сохранить вывод script.sh в командную переменную unix. say $a = {output of script.sh}

4b9b3361

Ответ 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

Когда вам нужен весь вывод, а не только одно значение, просто поместите вывод в переменную, как и другие ответы, укажите