Wie würde man eine Trockenlaufoption in ein Bash-Skript implementieren?
Ich kann mir vorstellen, jeden einzelnen Befehl in ein if zu packen und den Befehl als Echo auszugeben, anstatt ihn auszuführen, wenn das Skript mit Trockenlauf ausgeführt wird.
Eine andere Möglichkeit wäre, eine Funktion zu definieren und dann jeden Befehlsaufruf durch diese Funktion zu leiten.
Etwas wie:
function _run () {
if [[ "$DRY_RUN" ]]; then
echo $@
else
$@
fi
}
`_run mv /tmp/file /tmp/file2`
`DRY_RUN=true _run mv /tmp/file /tmp/file2`
Ist das einfach falsch und gibt es einen viel besseren Weg, es zu tun?
_run()
Funktion, manchmal mit 'set -xv', aber ich würde einen besseren Weg lieben.Antworten:
Siehe BashFAQ / 050: Ich versuche, einen Befehl in eine Variable zu schreiben, aber die komplexen Fälle schlagen immer fehl! für eine Diskussion zu diesem Thema.
Obwohl jetzt entfernt, kann der Abschnitt Hinzufügen von Testfunktionen zu Programmen dennoch nützlich sein.
quelle
Ich wollte mit der Antwort von @Dennis Williamson spielen. Folgendes habe ich bekommen:
Das
eval "$@"
ist hier wichtig und besser als einfach zu tun$*
.$@
Gibt alle Parameter und$*
alle Parameter ohne Leerzeichen / Anführungszeichen zurück.quelle