Ответ 1
Вы можете использовать знак $
, например:
OUTPUT=$(expression)
Я новичок в 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. Пожалуйста, помогите.
Вы можете использовать знак $
, например:
OUTPUT=$(expression)
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
Если вы хотите сделать это с помощью 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
Я знаю, что это ДЕЙСТВИТЕЛЬНО старое сообщение, но я все еще собираюсь опубликовать свой вопрос здесь, вместо того, чтобы спрашивать и начинать другой поток, потому что я думаю, что мой вопрос связан..
Надеюсь, я получу ответ.
В любом случае, я хочу сделать то же самое, кроме того, я хочу, чтобы переменная запускала команду AGAIN и использовала обновленный вывод.
Например, допустим, я хочу установить вывод:
date +%r
... к переменной. Каждый раз, когда я повторяю var, время не меняется. Он остается замороженным во время установки var.
Я пробовал обернуть его в разные скобки, используя кавычки, двойные кавычки, разные комбинации. Ничего не работало.
Единственное, что сработало для меня, - это отменить var, снова установить его, а затем сразу же повторить.
Кто-нибудь знает лучший способ?
[edit] Я знаю, что я мог бы создать функцию. Но мне просто интересно, есть ли способ сделать это, не создавая функцию.