Pracuję nad skryptem bash, który chciałbym pracować dla kilku typów VCS. Zastanawiam się nad przetestowaniem, czy katalog jest repozytorium dla systemu, uruchamiając typowe polecenie info i sprawdzając kod powrotu, sukces lub błąd. W pseudokodzie:
if a svn command succeded;
Then run svn commands
elif a darcs command succeded;
Then run darcs commands
elif a mercurial command succeded;
then run hg commands
else
something else
fi
Mogę uruchomić polecenie, np.
darcs show repo
I użyć, $?
aby uzyskać jego kod powrotu.
Moje pytanie brzmi: czy istnieje dobry sposób na uruchomienie i zwrócenie numeru kodu powrotu w jednym wierszu? na przykład
if [ 0 -eq `darcs show repo`$? ];
Czy muszę zdefiniować funkcję?
Dodatkowym wymaganiem jest wydrukowanie zarówno stderr, jak i stdout.
źródło
Jak już wspomnieli inni,
if command
sprawdza, czy sięcommand
powiedzie. W rzeczywistości[ … ]
jest to zwykłe polecenie, które może być używane pozaif
lubwhile
warunkowo, chociaż jest rzadkie.Jednak w przypadku tej aplikacji przetestowałbym istnienie charakterystycznych katalogów. Będzie to poprawne w większej liczbie przypadków skrajnych. Wersja Bash / ksh / zsh / dash (niesprawdzona):
źródło
Cóż, to nie jest bardzo ładne, ale jest to jeden ze sposobów, aby to zrobić bezpośrednio:
Z definicji, jeśli testuje się kod wyjścia polecenia, nie trzeba wykonywać jawnego porównania, chyba że chce się czegoś więcej niż sukcesu lub niepowodzenia. Prawdopodobnie jest to bardziej elegancki sposób.
źródło
Inną zwięzłą opcją byłoby:
źródło