コマンドサブコマンド構造に加えて、Bashはcommand.subcommand構造もサポートしていますか?それでは、どうすればbashスクリプトに統合できますか?

コマンドサブコマンド構造に加えて、Bashはcommand.subcommand構造もサポートしていますか?それでは、どうすればbashスクリプトに統合できますか?

私のローカルコンピュータにmicrok8s(Micro Kubernetes)をインストールした後に私が出会ったコマンドの1つmicrok8s.enable dnsmicrok8s enable dnsgit status有効なコマンドですが、git.statusそうではありません。 Linuxシステムはこのタイプのコマンド構造をどのようにサポートしますか?この動作をBashスクリプトにどのように統合できますか?

ベストアンサー1

時には、プログラム(およびスクリプト)がプログラムを呼び出すために使用されたファイル名を確認し、そのファイルに基づいて動作を決定することがあります。

たとえば、次のファイルとシンボリックリンクを考えてみましょう。

$ 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)て比較できます。 1つはもう1つへのリンクですか?そうでなければ、inode番号は同じですか?

おすすめ記事