Shell-Script
除了命令子命令結構之外,Bash 還支持 command.subcommand 結構嗎?如果是,如何將其合併到 bash 腳本中?
在我的本地機器上安裝 microk8s (Micro Kubernetes) 後,我遇到的命令之一是
microk8s.enable dns
它也可以作為microk8s enable dns
. 這似乎不是一個普遍的事情。git status
是一個有效的命令,但git.status
不是。Linux 系統如何支持這種類型的命令結構?如何將此行為合併到我的 Bash 腳本中?
您有時會看到程序(和腳本)檢查用於呼叫程序的文件的名稱並以此為條件行為。
例如考慮這個文件和符號連結:
$ ls -l -rwxr-xr-x ... foo lrwxr-xr-x ... foo.bar -> foo
以及腳本的內容
foo
:#!/bin/bash readonly command="$(basename "${0}")" subcommand="$(echo "${command}" | cut -s -d. -f2)" if [[ "${subcommand}" == "" ]]; then subcommand="${1}" fi if [[ "${subcommand}" == "" ]]; then echo "Error: subcommand not specified" 1>&2 exit 1 fi echo "Running ${subcommand}"
該腳本解析命令名稱以查找子命令(基於您問題中的點符號)。有了它,我可以執行
./foo.bar
並獲得與執行相同的行為./foo bar
:$ ./foo.bar Running bar $ ./foo bar Running bar
需要明確的是,我不知道那
microk8s.enable
是在做什麼。你可以做一個ls -li $(which microk8s.enable) $(which microk8s)
並比較文件。一個連結到另一個嗎?如果不是,它們是否具有相同的 inode 編號?