Fish Shell 中的 Bash set

Nilesh Katuwal 2023年1月30日
  1. Bash set -x
  2. Bash set -e
  3. Bash set -u
  4. Fish Shell 命令
Fish Shell 中的 Bash set

在本文中,我們將學習在 Fish shell 中 bash set -eset -uset -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 -uset -eset -x,在 Fish 中不存在。在 Fish 中設定變數沒有專門的語法。

相反,它使用一個標準命令:set,它接受一個變數名和它的值。如果同時提供了變數和值,則 set 將值分配給具有指定名稱的變數。

允許多個值,因為 Fish 中的所有變數都是列表。