命令列

Caddy 具有標準的類 Unix 命令列介面。基本用法是:

caddy <command> [<args...>]

<尖括號> 表示將被您的輸入替換的參數。

[方括號] 表示可選參數。(圓括號) 表示必需參數。

省略號 ... 表示延續,即一個或多個參數。

--flags 可能具有單字母快捷方式,例如 -f

快速開始:caddycaddy helpman caddy(如果已安裝)


子命令

caddy adapt

caddy adapt
	[-c, --config <path>]
	[-a, --adapter <name>]
	[-p, --pretty]
	[--validate]

將配置適配為 Caddy 的原生 JSON 配置結構,並將輸出寫入 stdout,同時將任何警告寫入 stderr,然後退出。

--config 是配置檔案的路徑。如果省略,則假定當前目錄中存在 Caddyfile;否則,此標誌是必需的。如果您希望使用 stdin 而不是常規檔案,請使用 - 作為路徑。

--adapter 指定要使用的配置適配器;預設為 caddyfile

--pretty 將使用縮排格式化輸出,以便於人類閱讀。

--validate 將載入並配置(provision)適配後的配置以檢查其有效性(但不會實際開始運行該配置)。

請注意,成功適配的配置可能仍會驗證失敗。有關此範例,請使用此 Caddyfile:

localhost

tls cert_notexist.pem key_notexist.pem

嘗試適配它:

caddy adapt --config Caddyfile

它成功完成且沒有錯誤。然後嘗試:

caddy adapt --config Caddyfile --validate
adapt: validation: loading app modules: module name 'tls': provision tls: loading certificates: open cert_notexist.pem: no such file or directory

儘管該 Caddyfile 可以無錯誤地適配為 JSON,但實際的證書和/或金鑰檔案並不存在,因此驗證失敗,因為該錯誤發生在配置(provisioning)階段。因此,驗證是比適配更強大的錯誤檢查。

範例

將 Caddyfile 適配為您可以輕鬆手動閱讀和調整的 JSON:

caddy adapt --config /path/to/Caddyfile --pretty

caddy build-info

caddy build-info

列印由 Go 提供的有關構建的資訊(主模組路徑、套件版本、模組替換)。

caddy completion

caddy completion [bash|zsh|fish|powershell]

生成 shell 補全指令碼。這使您在輸入 caddy 命令時可以獲得標籤補全或自動補全(或類似功能,取決於您的 shell)。

要獲取將此指令碼安裝到特定 shell 的說明,請執行 caddy help completioncaddy completion -h

caddy environ

caddy environ

列印 Caddy 看到的環境變數,然後退出。在除錯初始化系統或程序管理器單元(如 systemd)時很有用。

caddy file-server

caddy file-server
	[-r, --root <path>]
	[--listen <addr>]
	[-d, --domain <example.com>]
	[-b, --browse]
	[--reveal-symlinks]
	[-t, --templates]
	[--access-log]
	[-v, --debug]
	[-f, --file-limit <number>]
	[--no-compress]
	[-p, --precompressed]

啟動一個簡單但可用於生產環境的靜態檔案伺服器。

--root 指定根檔案路徑。預設為當前工作目錄。

--listen 接受一個監聽地址。預設為 :80,除非使用了 --domain,否則 :443 將是預設值。

--domain 將僅透過該主機名提供檔案,並且 Caddy 將嘗試透過 HTTPS 提供服務,因此如果是公共域名,請確保先正確配置任何公共 DNS。預設連接埠將更改為 443。

--browse 如果請求了沒有索引檔案的目錄,將啟用目錄列表。

--reveal-symlinks 當啟用 --browse 時,將在目錄列表中顯示符號連結的目標。

--templates 將啟用模板渲染。

--access-log 啟用請求/存取日誌。

--debug 啟用詳細日誌記錄。

--file-limit 設定在目錄列表中顯示的最大檔案數量。預設值:10000。如果檔案數量超過此限制,則僅顯示前 N 個檔案,其中 N 是指定的限制。

--no-compress 禁用壓縮。預設情況下,啟用了 Zstandard 和 Gzip 壓縮。

--precompressed 指定要搜索預壓縮旁載檔案(sidecar files)的編碼格式。可以重複使用多種格式。有關更多資訊,請參見 file_server 指令

此命令禁用了管理 API,從而更容易在本地開發機器上運行多個實例。

caddy file-server export-template

caddy file-server export-template

將預設的檔案瀏覽模板匯出到 stdout

caddy fmt

caddy fmt [<path>]
	[-w, --overwrite]
	[-d, --diff]

格式化或美化 Caddyfile,然後退出。除非使用 --overwrite,否則結果將列印到 stdout,如果存在任何差異,將以代碼 1 退出。

&lt;path&gt; 指定 Caddyfile 的路徑。如果是 -,則從 stdin 讀取輸入。如果省略,則假定當前目錄中名為 Caddyfile 的檔案。

--overwrite 導致將結果寫入輸入檔案,而不是列印到終端。如果輸入不是常規檔案,則此標誌無效。

--diff 導致將輸出與輸入進行比較,並且在不同的行前會加上 -+。請注意,未更改的行前會加上兩個空格以進行對齊,並且這不是有效的補丁(patch)格式;它僅作為視覺工具。

caddy hash-password

caddy hash-password
	[-p, --plaintext <password>]
	[-a, --algorithm <name>]
[--bcrypt-cost &lt;cost&gt;]</code></pre>

對純文字密碼進行雜湊處理的便捷方法。產生的雜湊值將寫入 stdout,其格式可直接在您的 Caddy 配置中使用。

--plaintext 要雜湊的密碼。如果省略,它將從 stdin 讀取。 如果 Caddy 連接到控制 TTY,輸入將不會回顯。

--algorithm 選擇雜湊演算法。有效選項包括: * argon2id(推薦用於現代安全性) * bcrypt (舊版,較慢,可配置成本,預設成本為 14

bcrypt 特定參數:

--bcrypt-cost 設定 bcrypt 雜湊難度。較高的值透過使雜湊計算變慢且更耗費 CPU 來提高安全性。 必須在有效範圍 [bcrypt.MinCost, bcrypt.MaxCost] 內。 如果省略或無效,則使用預設成本。

Argon2id 特定參數:

--argon2id-time 要執行的迭代次數。增加此值會使雜湊變慢,並增強對暴力攻擊的抵抗力。

--argon2id-memory 雜湊期間使用的記憶體量。 較大的值會增加對 GPU/ASIC 攻擊的抵抗力。

--argon2id-threads 要使用的 CPU 執行緒數。增加此值可在多核系統上加快雜湊速度。

--argon2id-keylen 產生的雜湊值的長度(以位元組為單位)。較長的金鑰會增加安全性,但會稍微增加存儲大小。

caddy help

caddy help [<command>]

列印 CLI 說明文字(可選特定子命令),然後退出。

caddy list-modules

caddy list-modules
	[--packages]
	[--versions]
	[-s, --skip-standard]
	[--json]

列印已安裝的 Caddy 模組,可選包含來自其關聯 Go 模組的套件和/或版本資訊,然後退出。

在某些腳本編寫情況下,列印所有標準模組可能是多餘的,因此您可以使用 --skip-standard 從輸出中省略這些模組。

--json 以 JSON 格式輸出模組資訊,這對於程式化處理很有用。

注意:由於 Go 中的一個錯誤,僅當 Caddy 作為依賴項而不是主模組構建時,版本資訊才可用。使用 xcaddy 使其更容易。

caddy manpage

caddy manpage
	(-o, --directory <path>)

為 Caddy 命令生成手冊/文件頁,並將其寫入指定路徑的目錄。此命令的輸出可以由 man 命令讀取。

--directory(必需)是寫入手冊頁的目錄路徑。如果不存在,它將被創建。

生成後,手冊頁通常需要安裝。此程序因平台而異,但在典型的 Linux 系統上,通常如下所示:

$ caddy manpage --directory man
$ gzip -r man/
$ sudo cp man/* /usr/share/man/man8/
$ sudo mandb

然後您可以執行 man caddy(或對子命令執行 man caddy-*)在您的終端機中閱讀文件。

手冊頁與我們網站上的文件是分開的文件。我們的網站有更全面且經常更新的文件。

caddy reload

caddy reload
	[-c, --config <path>]
	[-a, --adapter <name>]
	[--address <interface>]
	[-f, --force]

為正在運行的 Caddy 實例提供新配置。這與將文件 POST 到 /load 端點 具有相同的效果,但此命令對於圍繞配置檔案的簡單工作流程非常方便。與 stopstartrun 命令相比,此單一命令是更改/重新載入正在運行的配置的正確且語義化的方式。

因為此命令使用 API,所以管理端點不得被禁用。

--config 是要套用的配置檔案。如果是 -,則從 stdin 讀取配置。如果未指定,它將嘗試在當前工作目錄中尋找名為 Caddyfile 的檔案,如果存在,它將使用 caddyfile 配置適配器進行適配;否則,如果沒有要載入的配置檔案,則會報錯。

--adapter 指定要使用的配置適配器(如果有)。如果 --config 檔名以 Caddyfile 開頭或以 .caddyfile 結尾,則不需此標誌,因為預設會使用 caddyfile 適配器。否則,如果提供的配置檔案不是 Caddy 的原生 JSON 格式,則此標誌是必需的。任何警告都將列印到日誌中,但請注意,任何沒有錯誤的適配都將立即使用,即使有警告。如果您想先檢查適配結果,請使用 caddy adapt 子命令。

--address 如果管理端點未在預設位址上監聽,且與提供配置檔案中的位址不同,則需要使用此標誌。

--force 將導致即使指定的配置與 Caddy 已經運行的配置相同也進行重新載入。這對於強制 Caddy 重新配置(reprovision)其模組非常有用,這可能會產生副作用,例如:重新載入手動載入的 TLS 證書。

caddy respond

caddy respond
	[-s, --status <code>]
	[-H, --header "<Field>: <value>"]
	[-b, --body <content>]
	[-l, --listen <addr>]
	[-v, --debug]
	[--access-log]
	[<status|body>]

啟動一個或多個簡單的、硬編碼的 HTTP 伺服器,這對於開發、預演和某些生產案例非常有用。它對於驗證或除錯 HTTP 客戶端、指令碼甚至負載平衡器很有幫助。

--status 是要回傳的 HTTP 狀態碼。

--header 添加一個 HTTP 標頭;預期格式為 Field: value。此標誌可以多次使用。

--body 指定回應主體。或者,可以從 stdin 透過管道傳輸主體。

--listen 是監聽地址,可以是 Caddy 識別的任何 網路地址,並且可以包含啟動多個伺服器的連接埠範圍。

--debug 啟用詳細偵錯日誌記錄。

--access-log 啟用存取/請求日誌記錄。

在未指定任何選項的情況下,此命令在隨機可用連接埠上進行監聽,並以空的 200 回應回答 HTTP 請求。可以使用 --listen 標誌自定義監聽位址,該位址將始終列印到 stdout。如果監聽地址包含連接埠範圍,則將啟動多個伺服器。

如果給出了最後一個未命名的參數,則如果是 3 位數字,它將被視為狀態碼(與 --status 標誌相同)。否則,它將用作回應主體(與 --body 標誌相同)。--status--body 標誌將始終覆蓋此參數。

可以透過 3 種方式給出主體:標誌、命令的最後一個(且未命名)參數,或者(如果未設定標誌和參數)透過管道傳輸到 stdin。主體支援有限的 模板評估,包含以下變數:

變數 描述
.N 伺服器編號
.Port 監聽連接埠
.Address 監聽地址

範例

隨機連接埠上的空 200 回應:

caddy respond

帶有主體的 HTTP 回應:

caddy respond "Hello, world!"

多個伺服器和模板:

$ caddy respond --listen :2000-2004 "I'm server {{.N}} on port {{.Port}}"

Server address: [::]:2000
Server address: [::]:2001
Server address: [::]:2002
Server address: [::]:2003
Server address: [::]:2004

$ curl 127.0.0.1:2002
I'm server 2 on port 2002

透過管道傳入維護頁面:

cat maintenance.html | caddy respond \
	--listen :80 \
	--status 503 \
	--header "Content-Type: text/html"

caddy reverse-proxy

caddy reverse-proxy
	[-f, --from <addr>]
	(-t, --to <addr>)
	[-H, --header-up "<Field>: <value>"]
	[-d, --header-down "<Field>: <value>"]
	[-c, --change-host-header]
	[-r, --disable-redirects]
	[-i, --internal-certs]
	[-v, --debug]
	[--access-log]
	[--insecure]

一個簡單但可用於生產環境的 reverse_proxy。適用於快速部署、演示和開發。

簡單地將 HTTP(S) 流量從 --from 地址傳送到 --to 地址。可以透過重複標誌來指定多個 --to 地址。至少需要一個 --to 地址。--to 地址可以有一個連接埠範圍,作為擴展到多個上游的快捷方式。

除非在位址中另有說明,否則如果給出了主機名,則 --from 地址將被假定為 HTTPS,而 --to 地址將被假定為 HTTP。

如果 --from 地址具有主機或 IP,Caddy 將嘗試使用證書透過 HTTPS 提供服務(除非被 HTTP 方案或連接埠覆蓋)。

如果提供 HTTPS 服務:

  • --disable-redirects 可用於避免綁定到 HTTP 連接埠。

  • --internal-certs 可用於強制使用內部 CA 發行證書,而不是嘗試發行公共證書。

對於代理:

  • --header-up 可用於設定要發送到上游的請求標頭。

  • --header-down 可用於設定要發送回客戶端的回應標頭。

  • --change-host-header 將請求上的 Host 標頭設定為上游的位址,而不是預設為傳入的 Host 標頭。

    這是 --header-up "Host: {http.reverse_proxy.upstream.hostport}" 的快捷方式。

  • --insecure 禁用與上游的 TLS 驗證。警告:這會因不驗證上游證書而導致安全性喪失。

  • --debug 啟用詳細日誌記錄。

此命令禁用了管理 API,因此更容易在本地開發機器上運行多個實例。

caddy run

caddy run
	[-c, --config <path>]
	[-a, --adapter <name>]
	[--pidfile <file>]
	[-e, --environ]
	[--envfile <file>]
	[-r, --resume]
	[-w, --watch]

運行 Caddy 並無限期阻塞;即「守護程序(daemon)」模式。

--config 指定要立即載入並使用的初始配置檔案。如果是 -,則從 stdin 讀取配置。如果未指定配置,Caddy 將以空白配置運行,並為 管理 API 端點 使用預設設定,該端點可用於向其提供新配置。作為一種特殊情況,如果當前工作目錄有一個名為「Caddyfile」的檔案並且插入了 caddyfile 配置適配器(預設),則即使沒有任何命令列標誌,該檔案也會被載入並用於配置 Caddy。

--adapter 是載入初始配置時要使用的配置適配器的名稱(如果有)。如果 --config 檔名以 Caddyfile 開頭或以 .caddyfile 結尾,則不需此標誌,因為預設會使用 caddyfile 適配器。否則,如果提供的配置檔案不是 Caddy 的原生 JSON 格式,則此標誌是必需的。任何警告都將列印到日誌中,但請注意,任何沒有錯誤的適配都將立即使用,即使有警告。如果您想先查看適配結果,請使用 caddy adapt 子命令。

--pidfile 將 PID 寫入指定的檔案。

--environ 在啟動前列印出環境變數。這與 caddy environ 命令相同,但列印後不會退出。

--envfile 從指定的檔案中以 KEY=VALUE 格式載入環境變數。支援以 # 開頭的註解;金鑰可能以 export 為字首;值可以用雙引號括起來(內部的雙引號可以轉義);支援多行值。

--resume 使用上次自動儲存的載入配置,覆蓋 --config 標誌(如果存在)。使用此標誌可確保配置在機器重新啟動或程序重啟後具有持久性。它在以 API 為中心的部署中最為有用。

--watch 將監視配置檔案並在更改後自動重新載入。 ⚠️ 此功能僅適用於本地開發環境!

caddy start

caddy start
	[-c, --config <path>]
	[-a, --adapter <name>]
	[--envfile <file>]
	[--pidfile <file>]
	[-w, --watch]

caddy run 相同,但在後臺運行。此命令僅在後臺程序成功運行(或運行失敗)之前阻塞,然後回傳。

注意:標誌 --config 支援 - 來從 stdin 讀取配置。

不鼓勵在系統服務或 Windows 上使用此命令。在 Windows 上,子程序將保持連接到終端,因此關閉窗口將強制停止 Caddy,這並不明顯。請考慮將 Caddy 作為服務 運行。

啟動後,您可以使用 caddy stopPOST /stop API 端點來退出後臺程序。

caddy stop

caddy stop
	[--address <interface>]
	[-c, --config <path> [-a, --adapter <name>]]

優雅地停止正在運行的 Caddy 程序(停止命令本身的程序除外)並使其退出。它使用管理 API 的 POST /stop 端點來執行優雅停機。

如果正在運行的實例的管理 API 未使用預設監聽位址,則可以使用 --address 標誌或從給定的 --config 自定義此請求的位址。

如果您想停止當前配置但不退出程序,請使用帶有空白配置的 caddy reload,或 DELETE /config/ 端點。

caddy storage

⚠️ 實驗性功能

允許匯出和匯入 Caddy 配置的數據存儲內容。

這在需要從一個 存儲模組 轉換到另一個存儲模組時非常有用,方法是從舊模組匯出,更新配置,然後匯入到新模組。

以下命令可用於一鍵在不同模組之間複製存儲,使用舊配置和新配置,將匯出命令的輸出透過管道傳輸到匯入命令中。

$ caddy storage export -c Caddyfile.old -o- |
  caddy storage import -c Caddyfile.new -i-

caddy storage export

caddy storage export
	-c, --config <path>
	[-o, --output <path>]

--config 是要載入的配置檔案。這是必需的,以便連接到正確的存儲模組。

--output 是寫入 tar 封裝檔的檔名。如果是 -,則將輸出寫入 stdout。

caddy storage import

caddy storage import
	-c, --config <path>
	-i, --input <path>

--config 是要載入的配置檔案。這是必需的,以便連接到正確的存儲模組。

--input 是要讀取的 tar 封裝檔的檔名。如果是 -,則從 stdin 讀取輸入。

caddy trust

caddy trust
	[--ca <id>]
	[--address <interface>]
	[-c, --config <path> [-a, --adapter <name>]]

將 Caddy 的 PKI app 管理的 CA 的根證書安裝到本地信任存儲中。

Caddy 會在首次生成根證書時嘗試自動將其安裝到本地信任存儲中,但如果 Caddy 沒有適當的權限寫入信任存儲,則可能會失敗。如果伺服器程序以非特權用戶(例如透過 systemd)運行,則在安裝證書之前必須執行此命令。您可能需要在 Unix 系統上使用 sudo 執行此命令。

預設情況下,此命令安裝 Caddy 預設 CA(即「local」)的根證書。您可以使用 --ca 標誌指定另一個 CA 的 ID。

此命令將嘗試連接到 Caddy 的 管理 API 以獲取根證書,使用 GET /pki/ca/<id>/certificates 端點。如果正在運行的實例的管理 API 未使用預設監聽地址,您可以明確指定 --address,或使用 --config 標誌從配置中載入管理位址。

如果管理 API 可供其他機器存取,您還可以使用帶有此命令的 caddy 二進位檔案在網路中的其他機器上安裝證書——執行此操作時請小心,不要將管理 API 暴露給不受信任的客戶端。

caddy untrust

caddy untrust
	[-p, --cert <path>]
	[--ca <id>]
	[--address <interface>]
	[-c, --config <path> [-a, --adapter <name>]]

從本地信任存儲中取消對根證書的信任。

此命令解除信任;它不一定會從信任存儲中完全刪除根證書。因此,重複信任和取消對新證書的信任可能會填滿信任資料庫。

此命令不會從 Caddy 配置的存儲中刪除或修改證書檔案。

此命令可以透過以下兩種方式之一使用:

  • 透過使用 --cert 標誌指定要取消信任的根證書的直接路徑。
  • 透過使用 GET /pki/ca/<id>/certificates 端點從 管理 API 獲取根證書。如果沒有給出標誌,這是預設行為。

如果使用管理 API,則 CA ID 預設為「local」。您可以使用 --ca 標誌指定另一個 CA 的 ID。如果正在運行的實例的管理 API 未使用預設監聽地址,您可以明確指定 --address,或使用 --config 標誌從配置中載入管理地址。

caddy upgrade

⚠️ 實驗性功能

caddy upgrade
	[-k, --keep-backup]

將當前的 Caddy 二進位檔案替換為 我們的下載頁面 中的最新版本,並安裝相同的模組,包括在 Caddy 網站上註冊的所有第三方外掛。

升級不會中斷正在運行的伺服器;目前,該命令僅替換磁碟上的二進位檔案。如果我們能找到一個好的方法,這在未來可能會改變。

升級過程具有容錯性;當前的二進位檔案首先被備份(複製到當前檔案旁邊),如果出現任何問題,會自動恢復。如果您希望在升級過程完成後保留備份,可以使用 --keep-backup 選項。

如果您的用戶沒有寫入可執行檔案的權限,此命令可能需要較高的權限。

caddy add-package

⚠️ 實驗性功能

caddy add-package <packages...>
	[-k, --keep-backup]

caddy upgrade 類似,將當前的 Caddy 二進位檔案替換為安裝了相同模組的最新版本, 包含作為參數列出的套件。從 我們的下載頁面 中找到您可以安裝的套件列表。每個參數應該是完整的套件名稱。

例如:

caddy add-package github.com/caddy-dns/cloudflare

caddy remove-package

⚠️ 實驗性功能

caddy remove-package <packages...>
	[-k, --keep-backup]

caddy upgrade 類似,將當前的 Caddy 二進位檔案替換為安裝了相同模組的最新版本,但 包含作為參數列出的套件(如果當前二進位檔案中存在這些套件)。執行 caddy list-modules --packages 以查看當前二進位檔案中包含的非標準模組的套件名稱列表。

caddy validate

caddy validate
	[-c, --config <path>]
	[-a, --adapter <name>]
	[--envfile <file>]

驗證配置檔案,然後退出。此命令將配置反序列化,然後載入並配置(provision)其所有模組,就像啟動配置一樣,但配置實際上並未啟動。這暴露了在載入或配置階段產生的配置錯誤,並且是比僅將配置序列化為 JSON 更強大的錯誤檢查。

--config 是要驗證的配置檔案。如果是 -,則從 stdin 讀取配置。預設是當前目錄中的 Caddyfile(如果有)。

--adapter 是要使用的配置適配器的名稱。如果 --config 檔名以 Caddyfile 開頭或以 .caddyfile 結尾,則不需此標誌,因為預設會使用 caddyfile 適配器。否則,如果提供的配置檔案不是 Caddy 的原生 JSON 格式,則此標誌是必需的。

--envfile 從指定的檔案中以 KEY=VALUE 格式載入環境變數。支援以 # 開頭的註解;金鑰可能以 export 為字首;值可以用雙引號括起來(內部的雙引號可以轉義);支援多行值。

caddy version

caddy version

列印版本並退出。

訊號

Caddy 會捕捉某些訊號並忽略其他訊號。訊號可以啟動特定的程序行為。

訊號 行為
SIGINT 優雅退出。再次發送訊號以立即強制退出。
SIGQUIT 立即退出 Caddy,但仍會清理存儲中的鎖(lock),因為這很重要。
SIGTERM 優雅退出。
SIGUSR1 重新載入配置檔案,但僅當使用 caddy run(不帶 --resume)啟動且未透過 API(包括 [caddy reload]#caddy-reload)對配置進行任何更改時才有效。
SIGUSR2 忽略。
SIGHUP 忽略。

優雅退出意味著不再接受新連接,現有連接將在通訊端(socket)關閉之前排空。可能會套用寬限期(且是可配置的)。寬限期過後,連接將被強制終止。存儲中的鎖(lock)以及各個模組需要釋放的其他資源會在優雅停機期間被清理。

當收到重新載入配置的訊號(SIGUSR1)時,它的行為就像強制配置重新載入(即即使配置文字未更改也重新載入),這可能會從磁碟重新載入 TLS 證書等依賴檔案。

僅當 Caddy 使用配置檔案以 caddy run 啟動時,才啟用基於訊號的配置重新載入。如果 Caddy 以 --resume 啟動(因為它暗示了 API 工作流程),或者如果透過管理 API 接收到任何配置更改,或者如果以與最初啟動時 不同 的檔名或配置適配器執行 caddy reload,則它們將被禁用(忽略訊號,並帶有日誌警告)。這是為了避免重新載入方法之間的衝突。

退出碼

Caddy 在程序退出時回傳一個代碼:

代碼 含義
0 正常退出。
1 啟動失敗。 請勿自動重啟程序;除非進行更改,否則它可能會再次出錯。
2 強制退出。Caddy 被強制退出而未清理資源。
3 退出失敗。Caddy 在清理期間帶有一些錯誤退出。

在 bash 中,您可以使用 echo $? 獲取上一個命令的退出碼。