2010-04-16 3 views

ответ

6

статус Выход обычно используется неявное, как это:

if IsThereAnyApplesLeft;then 
    echo "Apples left" 
fi 
+0

+1 Если вам действительно не нужен фактический код выхода; но я обычно не хочу, чтобы за пределами c – guns

+0

Не забывайте условия короткого замыкания: IsThereAnyApplesLeft && echo «Яблоки слева» – pra

3

Try:

applesLeft=$(IsThereAnyApplesLeft > /dev/null)$? 

И да, вы, чтобы использовать $? нет никакого способа избежать этого.

+0

+1 Умный! И, предполагая, что нет выхода для stdout (или stderr), перенаправление может быть опущено. –

-1

Что не изящного о $??

Согласно the Advanced Bash Scripting Guide, нет другого способа получить код выхода, кроме $? - ну, они не указали другой способ его получения, кроме $?. Если бы был другой способ, он, несомненно, был бы указан в разделе «Выходной код» в приведенной выше ссылке.

+0

Вот только если вы хотите сохранить статус выхода. Если вы собираетесь использовать только один статус, вы можете использовать его непосредственно в тесте 'if IsThereAnyApplesLeft; затем эхо «да»; else echo "no"; fi' – mpez0

0

Две части кода не сопоставимы. Пример вашего bash - это создание подпроцесса для запуска исполняемого файла под названием «IsThereAnyApplesLeft», ожидающего завершения этого подпроцесса и сохранения кода выхода подпроцесса в переменной $? так что вы можете проверить его и действовать соответствующим образом.

Это на самом деле довольно сложное взаимодействие, и для того же, что и в C, требуется значительный объем кода. Вам нужно будет обработать подпроцесс fork(), иметь родительский wait4pid() на pid ребенка, в то же время в случае, когда ребенок вызывает execl() в файле IsThereAnyApplesLeft, чтобы он выполнялся. Одним из преимуществ использования языка сценариев оболочки является то, что он скрывает от вас подобные вещи.

Для сравнения, ваш фрагмент кода C просто вызывает функцию C и сохраняет результат в локальной переменной. Это будет выглядеть так: bash:

IsThereAnyApplesLeft() 
{ 
     echo 498 
} 

applesLeft=`IsThereAnyApplesLeft` 
echo "there are $applesLeft apples left." 
Смежные вопросы