Есть ли способ записать вывод команды и ее возвращаемое значение в переменные в сценарии оболочки? - PullRequest
0 голосов
/ 17 ноября 2009

Итак, допустим, у меня есть команда, foo, в сценарии, которая имеет как возвращаемое значение, так и выходную строку, которая мне интересна, и я хочу сохранить их в переменной (хорошо наименьший ее вывод для переменной и его возвращаемое значение можно использовать для условного выражения).

Например:

a=$(`foo`)   # this stores the output of "foo"
if foo; then # this uses the return value
    stuff...
fi

Лучшее, что я могу придумать, чтобы захватить этот вывод, это использовать какой-то временный файл:

if foo > $tmpfile; then
    a=$(`cat $tmpfile`)
    stuff...
fi

Можно ли как-нибудь это упростить?

Ответы [ 3 ]

4 голосов
/ 17 ноября 2009

это

out=$(cmd)
rv=$?
if test $rv -eq 0; then
  echo "all good"
  echo $out
else
  echo "wtf, exit code was $rv"
fi

btw, $ () и backticks - два синтаксиса для одного и того же эффекта, что означает, что вы только хотите написать

$(`foo`)

, если foo выводит текст команды, которую вы хотите выполнить снова. как:

foo()
{
  echo echo date
}
$(foo)
$(`foo`)
3 голосов
/ 17 ноября 2009
output=`foo`
echo "Return: $?" # $? is the return code
2 голосов
/ 17 ноября 2009

Из bash: (обратите внимание, что первый $ в первом столбце - моя подсказка)

$ A=$(echo abc; false); echo status:$? A:$A
status:1 A:abc

Не используйте $() плюс обратные галочки, так как это фактически выполняет команду, а затем выполняет ее вывод.

Смотри также:

...