如何在 bash 腳本中實現試運行選項?
我可以考慮將每個命令包裝在 if 中並回顯該命令,而不是在腳本通過 dry-run 運行時運行它。
另一種方法是定義一個函數,然後透過該函數傳遞每個命令呼叫。
就像是:
function _run () {
if [[ "$DRY_RUN" ]]; then
echo $@
else
$@
fi
}
`_run mv /tmp/file /tmp/file2`
`DRY_RUN=true _run mv /tmp/file /tmp/file2`
這是錯的嗎?
答案1
看BashFAQ/050:我試著將指令放入變數中,但複雜的情況總是失敗!來討論這個主題。
雖然現已刪除,但該部分如何為程式添加測試能力可能仍然有用。
答案2
我想嘗試@Dennis Williamson 的答案。這是我得到的:
Run () {
if [ "$TEST" ]; then
echo "$*"
return 0
fi
eval "$@"
}
在這裡很eval "$@"
重要,並且比簡單地做更好$*
。$@
傳回所有參數並$*
傳回所有不含空格/引號的參數。
$ mkdir dir
$ touch dir/file1 dir/file2
$ FOO="dir/*"
$ TEST=true Run ls -l $FOO
ls -l dir/file1 dir/file2
$ Run ls -l $FOO
-rw-r--r-- 1 stefanl stefanl 0 Jun 2 21:06 dir/file1
-rw-r--r-- 1 stefanl stefanl 0 Jun 2 21:06 dir/file2