Command-Line

在設計 CLI 時,是否有使用選項或子命令的偏好/經驗法則?

  • March 6, 2021

例如,要安裝一個軟體包,pacman將使用:

pacman -S <package>

While someone usingdnf將鍵入:

dnf install <package>

While pacmanuses the -Soption, dnfuses the subcommand install

其他一些例子是nmcliand tar, with nmcli connection up <connection>(uses subcommands) and tar -xzvf <file>(uses options).

各有什麼優缺點,還是只是個人喜好?

您所謂的“單詞”的更專業術語是“子命令”。將命令行界面設計為帶有許多子命令的命令是很常見的,每個子命令都有自己的一組選項。有時子命令有自己的子命令。git 就是這樣一個例子:

git remote add -f -t "$BRANCH_NAME" "$REMOTE_NAME" "git://example.com/repo"

將 CLI 拆分為子命令的一個原因是強調它可以執行多種不同的相關操作。dnfcan installpacakges, removepackages, upgradepackages, searchfor packages, show infoabout a package 等等。所有完全不同的動作。其中許多操作都有額外的旋鈕,你可以調整和選擇,你可以通過選項做出選擇。

使用子命令的另一個原因是子命令為選項提供了命名空間:--allin意味著與indnf list --all完全不同的東西--all``dnf search --all

將大型 CLI 拆分為子命令的另一個原因是文件。想像一下如果 git 沒有子命令。整個 git 手冊將是一個冗長的頁面,詳細說明 git 的每個選項以及它們之間的關係。另外:執行git commit --help- 您將看到特定於commit子命令的幫助頁面。另外:安裝tldr並執行tldr git commit- 你會得到一個特定於commit子命令的備忘單。

另一個考慮因素是,如果要允許組合它們啟用的操作模式,則不應使用子命令*。*您可以在單個命令呼叫中指定多個選項,但您只能指定一個子命令。

引用自:https://unix.stackexchange.com/questions/637840