私のローカルコンピュータにmicrok8s(Micro Kubernetes)をインストールした後に私が出会ったコマンドの1つmicrok8s.enable dns
はmicrok8s enable dns
。git 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番号は同じですか?