スクリプト自体の中で Bash スクリプト ファイルの名前をどのように特定できますか?
たとえば、スクリプトがファイル内にある場合runme.sh
、それをハードコーディングせずに「runme.sh を実行しています」というメッセージを表示するにはどうすればよいでしょうか?
ベストアンサー1
me=$(basename "$0")
通常は望ましくないシンボリックリンク1を介して読み取るには (通常、このようにしてユーザーを混乱させたくはありません)、次を試してください。
me="$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")"
私の意見では、それは混乱を招く出力を生成します。「foo.sh を実行したのに、bar.sh を実行していると表示されます。バグに違いありません!」さらに、異なる名前のシンボリックリンクを持つ目的の 1 つは、呼び出された名前に基づいて異なる機能を提供することです (一部のプラットフォームの gzip と gunzip を考えてみてください)。
1つまり、ユーザーがfoo.sh
(実際には へのシンボリックリンク)を実行するときに、ではなくbar.sh
解決された名前を使用するようにシンボリックリンクを解決するということです。bar.sh
foo.sh