在 bash 腳本中實現試運行

在 bash 腳本中實現試運行

如何在 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

相關內容