Jak zaimplementować opcję suchobiegu w skrypcie bash?
Mogę wymyślić albo zawinięcie każdego polecenia w if i powtórzenie polecenia zamiast uruchamiania go, jeśli skrypt działa na sucho.
Innym sposobem byłoby zdefiniowanie funkcji, a następnie przekazanie każdego wywołania polecenia przez tę funkcję.
Coś jak:
function _run () {
if [[ "$DRY_RUN" ]]; then
echo $@
else
$@
fi
}
`_run mv /tmp/file /tmp/file2`
`DRY_RUN=true _run mv /tmp/file /tmp/file2`
Czy to po prostu źle i istnieje na to znacznie lepszy sposób?
_run()
funkcja, czasami z 'set -xv', ale chciałbym lepszy sposób.Odpowiedzi:
Zobacz BashFAQ / 050: Próbuję umieścić polecenie w zmiennej, ale złożone przypadki zawsze zawodzą! do dyskusji na ten temat.
Chociaż teraz usunięty, sekcja Jak dodać możliwość testowania do programów może być nadal przydatna.
źródło
Chciałem zagrać z odpowiedzią @Dennis Williamson's. Oto co mam:
Jest
eval "$@"
to ważne tutaj i jest lepsze niż po prostu robienie$*
.$@
zwraca wszystkie parametry i$*
zwraca wszystkie parametry bez białych znaków / cudzysłowów.źródło