2013-02-19 16 views
13

Więc dowiedziałem się, że bash nie obsługuje wyjątków (nie ma try/catch). Dla mojego skryptu chciałbym wiedzieć, czy polecenie się powiodło, czy nie.Czy ktoś mógłby wytłumaczyć tę alternatywę try/catch w bash?

To jest część mojego kodu teraz:

command = "scp -p$port $user:[email protected]$host:$from $to" 
$command 2>/dev/null 

if (($? == 0)); then 
    echo 'command was successful' 
else 
    echo 'damn, there was an error' 
fi 

Rzeczy, których nie rozumiem to:

  • linia 3, dlaczego muszę umieścić 2 Za $command ?
  • linia 5, co to dokładnie jest z tym $?
+0

Jeśli zamierzasz zrobić bash włączony, google "samouczek SH" lub "bash samouczek", lub dla bardziej hard-core approacb 'man bash'. Są to bardzo podstawowe szczegóły i jest więcej takich drobnych szczegółów, niż można napisać SO pytania dotyczące .. – hyde

+0

Jaki jest cel 'if ((...)); wtedy ... '? Czy jest 'cmd; jeśli [$? == 0] ... "zasadniczo różnią się od siebie? – blong

Odpowiedz

25

$? oznacza kod powrotu ostatniego wykonanego polecenia.

2> oznacza przekierowanie wyjścia stderr (standardowy strumień błędów) do /dev/null.

+2

To była bardzo krótka wizyta w Stackoverflow, dziękuję! –

+0

Proszę oznaczyć jako odpowiedź, jeśli czujesz się usatysfakcjonowany moją odpowiedzią:) – legrandviking

11

Wystarczy FYI, to będzie też działać:

if some_command 2>/dev/null ; then 
    echo 'command was successful' 
else 
    echo 'damn, there was an error' 
fi 
Powiązane problemy