Fish Shell 中的 Bash set
在本文中,我們將學習在 Fish shell 中 bash set -e
、set -u
和 set -x
。
Bash set -x
set -x
命令用於除錯 Bash 指令碼,方法是將每個執行的語句列印到 shell 以進行除錯和故障排除。set -x
命令可以直接在互動式 Bash shell 或 Bash 指令碼中執行。
set -x
命令通常將 Bash shell 的初始化放在 sh-bang
之後。
在此示例中,我們使用 set -x
命令啟用除錯。預設情況下,在 Bash 中禁用除錯。
相反,每條語句都會列印到 Bash 終端,然後是語句的結果,以方便驗證。例如,echo "The First Tree"
先寫,然後是結果。
此外,除錯語句以加號開頭。
#!/bin/bash
set -x
echo " The First Tree"
echo "The Second Tree"
輸出:
+ echo ' The First Tree'
The First Tree
+ echo 'The Second Tree'
The Second Tree
Bash set -e
set -e
命令可用於停止指令碼或函式的執行,如果我們依賴指令碼或函式的執行並想要有關結果的精確資訊,則返回非零錯誤程式碼。
預設情況下,如果 Bash 函式和指令碼的執行正確完成且沒有錯誤,則返回 0。但是,如果出現問題,錯誤程式碼會提供有關該錯誤的特定詳細資訊。
在下面的示例中,如果在指令碼開頭髮生錯誤,我們將配置退出。由於沒有 root 許可權,mkdir /root/test
返回錯誤,無法建立目錄。
因此,echo "Progress..."
行現在可以執行並顯示在終端上。
#!/bin/bash
set -e
mkdir /root/test
echo "Progress..."
Bash set -u
set-u
命令指示 Bash shell 將未設定的變數解釋為錯誤並立即退出。這使我們更接近高階語言的行為。
set -u
命令可以防止和顯示未使用的 Bash 變數的錯誤。
例子:
#!/bin/bash
firstName="Jackie"
fullName="$firstname John"
echo "$fullName"
請參考前面的例子。你看到錯誤了嗎?
在第三行的右側,單詞"firstname"
全部小寫,而不是駝峰式。如果沒有 -u
選項,則不會顯示此錯誤。
然而,使用 -u
選項,指令碼在該行終止,退出程式碼 1
,並且訊息 "firstname: unbound variable"
列印到 stderr
。
通常,我們希望它明確而迅速地失敗,而不是建立可能要到很久以後才能發現的細微錯誤。
Fish Shell 命令
set fish_trace 1 # display the expanded command line before execution
set fish_trace 2 # prepend file and line number to the command line
set fish_trace 1 1 # print the command line before execution and the exit status following execution.
set fish_trace 1 2 # as above, except print the exit status of all subprocesses (?)
set fish_trace 0 1 # print command-line exit status
這些選項,例如 set -u
、set -e
和 set -x
,在 Fish 中不存在。在 Fish 中設定變數沒有專門的語法。
相反,它使用一個標準命令:set
,它接受一個變數名和它的值。如果同時提供了變數和值,則 set
將值分配給具有指定名稱的變數。
允許多個值,因為 Fish 中的所有變數都是列表。