2015-11-12 1 views
0

я хочу знать, как мы можем получить вывод команды в переменную в БашБаш как получить вывод команды асинхронной к переменной

вот мой код

#!/bin/bash 
opt="svcrack -v -u100 -r1-9999 -z3 10.0.0.1" 
opt2="$($opt)" 

echo "myout output $opt2" 

выход

myout output 

не работающая внутри функции: (

function zwork(){ 

opt=$(svcrack -v -u100 -r1-9999 -z3 10.0.0.1 2>&1) 

echo "myout output $opt" 
} 

out=$(zwork) 
+2

Я не вижу ничего асинхронного в сценарии. Если это результат, который вы получаете, ваша команда просто не имеет выхода на stdout. – 4ae1e1

+0

у него есть выход, svcrack - скрипт python –

+0

Я сказал, что нет выхода на stdout. Судя по вашему комментарию «это сработало» ниже, вывод находится на stderr, что не противоречит моему диагнозу. Но вы должны видеть вывод на stderr, тем не менее, если вы используете точный скрипт, как указано выше, в интерактивной оболочке. – 4ae1e1

ответ

1

Пожалуйста, попробуйте перенаправлять поток ошибок на стандартный вывод, как:

#!/bin/bash 
opt=$(svcrack -v -u100 -r1-9999 -z3 10.0.0.1 2>&1) 

echo "myout output $opt" 

Здесь вы можете прочитать больше о command substition.

+0

спасибо :) это сработало –

+0

сэр может у вас проверить, его не работает внутри функции, вопрос обновлен –

0

Если сохранить команду в переменной Баш вам нужно использовать Eval ключевое слово, чтобы выполнить эту команду. Так что в вашем случае вы должны сделать что-то вроде этого ...

opt="svcrack -v -u100 -r1-9999 -z3 10.0.0.1" 
opt2=$(eval $opt) 
echo "myout output $opt2" 

Исправление: Я испытывал это в ZSH (не чисто баш), поэтому мне нужно, чтобы добавить Eval и в конечном итоге при условии, это недостающий бит. Однако, как кто-то исправил меня в комментарии. Это не обязательно.

Только проблема в сценарии ОП была

opt2="$($opt)" 

это должно было быть

opt2=$($opt) 
+0

Неправда. Расширение параметров идет до подстановки команды, поэтому исходный скрипт действителен, хотя и довольно глупый. – 4ae1e1

Смежные вопросы