6

$0シェルスクリプトの名前に展開されます。

$ cat ./sample-script
#!/bin/bash
echo $0
$ chmod 700 ./sample-script
$ ./sample-script
./sample-script

シェル スクリプトがシンボリック リンク経由で呼び出された場合、$0その名前に展開されます。

$ ln -s ./sample-script symlinked-script
$ ./symlinked-script
./symlinked-script

エイリアスの名前を取得するにはどうすればよいですか? ここで、`$0' は再びファイル名に展開されます:

$ alias aliased-script=./sample-script
$ aliased-script
./sample-script
4

3 に答える 3

12

マニュアルページによると、エイリアスはかなりばかげています

...エイリアスは、実行時ではなく、コマンドの読み取り時に展開されます...

そのため、bash は基本的に文字列を別の文字列に置き換えてから実行するだけなので、コマンドがエイリアスで展開されたものを知る方法はありません。

于 2012-04-22T19:22:34.107 に答える
3

あなたはすでにこれを知っていると思いますが、記録のために答えは次のとおりです。エイリアスを実装するコードによる協力が必要です。

alternate_name () {
  MY_ALIAS_WAS=alternate_name real_name "$@"
}

または、置き換えられたエイリアス構文を本当に使用したい場合:

alias alternate_name="MY_ALIAS_WAS=alternate_name real_name"

...その後...

$ cat ~/bin/real_name
#!/bin/sh
echo $0, I was $MY_ALIAS_WAS, "$@"
于 2012-04-22T19:26:56.980 に答える
2

bash はこれを利用可能にしません。これが、エイリアスではなくシンボリック リンクを使用してマルチプレックス コマンドを呼び出す理由です。

于 2012-04-22T19:19:55.917 に答える