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

Присвоение вывода команды переменной

Я новичок в unix, и я пишу оболочку script.

Когда я запускаю эту строку в командной строке, она печатает общее количество числа процессов, которое соответствует:

ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'

Например, вывод вышеуказанной строки равен 2 в командной строке.

Я хочу написать оболочку script, в которой вывод указанной выше строки (2) присваивается переменной, которая позже будет использоваться для сравнения в выражении if.

Я ищу что-то вроде

output= `ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'`
echo $output

Но когда я запускаю его, он говорит, что вывод не может быть найден, в то время как я ожидаю 2. Пожалуйста, помогите.

4b9b3361

Ответ 1

Вы можете использовать знак $, например:

OUTPUT=$(expression)

Ответ 2

Try:

output=$(ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'); echo $output

Обертка вашей команды в $( ) указывает командам запустить эту команду, вместо того, чтобы пытаться установить команду на переменную с именем "output". (Обратите внимание, что вы также можете использовать backticks `command`.)

Я могу порекомендовать http://tldp.org/LDP/abs/html/commandsub.html, чтобы узнать больше о замене команд.

Кроме того, поскольку 1_CR правильно указывает в комментарии, дополнительное пространство между значком равенства и присваиванием приводит к сбою. Вот простой пример моей машины о поведении, которое вы испытываете:

[email protected]:~$ foo=$(ps -ef |head -1);echo $foo
UID PID PPID C STIME TTY TIME CMD

[email protected]:~$ foo= $(ps -ef |head -1);echo $foo
-bash: UID: command not found
UID PID PPID C STIME TTY TIME CMD

Ответ 3

Если вы хотите сделать это с помощью multiline/multiple command/s, вы можете сделать это:

output=$( bash <<EOF
#multiline/multiple command/s
EOF
)

Или:

output=$(
#multiline/multiple command/s
)

Пример:

#!/bin/bash
output="$( bash <<EOF
echo first
echo second
echo third
EOF
)"
echo "$output"

Вывод:

first
second
third

Ответ 4

Я знаю, что это ДЕЙСТВИТЕЛЬНО старое сообщение, но я все еще собираюсь опубликовать свой вопрос здесь, вместо того, чтобы спрашивать и начинать другой поток, потому что я думаю, что мой вопрос связан..

Надеюсь, я получу ответ.

В любом случае, я хочу сделать то же самое, кроме того, я хочу, чтобы переменная запускала команду AGAIN и использовала обновленный вывод.

Например, допустим, я хочу установить вывод:

date +%r

... к переменной. Каждый раз, когда я повторяю var, время не меняется. Он остается замороженным во время установки var.

Я пробовал обернуть его в разные скобки, используя кавычки, двойные кавычки, разные комбинации. Ничего не работало.

Единственное, что сработало для меня, - это отменить var, снова установить его, а затем сразу же повторить.

Кто-нибудь знает лучший способ?

[edit] Я знаю, что я мог бы создать функцию. Но мне просто интересно, есть ли способ сделать это, не создавая функцию.