Bagaimana cara menerapkan opsi dry-run dalam skrip bash?
Saya bisa memikirkan untuk membungkus setiap perintah tunggal dalam if dan mengulang perintah daripada menjalankannya jika skrip dijalankan dengan dry-run.
Cara lain adalah dengan mendefinisikan fungsi dan kemudian melewati setiap panggilan perintah melalui fungsi itu.
Sesuatu seperti:
function _run () {
if [[ "$DRY_RUN" ]]; then
echo $@
else
$@
fi
}
`_run mv /tmp/file /tmp/file2`
`DRY_RUN=true _run mv /tmp/file /tmp/file2`
Apakah ini salah dan ada cara yang lebih baik untuk melakukannya?
_run()
fungsi Anda , kadang-kadang dengan 'set -xv', tetapi saya akan menyukai cara yang lebih baik.Jawaban:
Lihat BashFAQ / 050: Saya mencoba untuk menempatkan perintah dalam variabel, tetapi kasus kompleks selalu gagal! untuk diskusi tentang hal ini.
Meskipun sekarang dihapus, bagian Bagaimana cara menambahkan kemampuan pengujian ke suatu program mungkin masih berguna.
sumber
Saya ingin bermain dengan jawaban dari @Dennis Williamson. Inilah yang saya dapatkan:
Yang
eval "$@"
penting di sini, dan lebih baik daripada hanya melakukan$*
.$@
mengembalikan semua parameter dan$*
mengembalikan semua parameter tanpa spasi / kutipan.sumber