実行可能ファイル名でエイリアスを作成する方法

実行可能ファイル名でエイリアスを作成する方法

私は次の行を実装してみました.bashrc

alias ./my_exec='printf "foo"'

ただし、エイリアスは機能せず、次の行が表示されます。

bash: alias: `./my_exec': invalid alias name

私はzshターミナルがそれを行うことができることを知っていますが、ターミナルのためターミナルに切り替えることはありません。

このエイリアスを操作する方法はありますか?

答え1

Bash-4.xから

$ BASH_ALIASES[./my_exec]='echo yes'
$ ./my_exec
yes

バッシュによるとマンページ/、エイリアスには使用できません。

その役割/$および上記のシェルメタ文字または引用符`は、=エイリアスには表示しないでください。

構文でエイリアスを定義すると、alias name=valbashは正規表現で定義された文字を含むエイリアスを拒否します。

[ \t\n&();<>|\\"'`$/]

よりlegal_alias_name()ソースコードで関数を操作します。上記の内容がないことは欠けてい=ません。エイリアスに使用できないことは単に構文の問題です。

しかし、あなたはできるエイリアスには、次の文字の一部を使用して、配列を介してエイリアスを間接的に定義しますBASH_ALIASES

$ BASH_ALIASES['/a=$']='echo yes'; /a=$
yes

これは安定「bash-5.0から/エイリアスとして使用できなくなりました。ただし、便宜のために、次のものを使用できます=

bash-5.0-18-g36f2c406$ BASH_ALIASES[ef=g]='echo yess'
bash-5.0-18-g36f2c406$ ef=g
yess
bash-5.0-18-g36f2c406$ echo $ef
<nothing>

susv4のエイリアス基準

3.10 エイリアス

シェルコマンド言語では、下線、数字、移植可能な文字セットの文字のみで構成される単語と、次の文字のいずれか:!、、、、。%,@

実装では、エイリアスの追加文字を拡張子として受け入れることができます。

したがってbashzsh(別名で直接使用できる/)はすべて標準範囲内です。

関数名のスラッシュやその他の興味深い文字

bashとでは、関数名にzshaを直接使用できます。/

$ /bin/sh(){ echo no /bin/sh today; }
$ /bin/sh -c ls
no /bin/sh today

これは移植できない拡張です。標準シェルはサポートするだけです。機能名含むASCII 文字、数字、下線を使用でき、数字で始まらない。

では、bash関数名に$は数値のみを含めず、関数定義構文によって課される制約内にある場合を除く任意の文字で構成できます。あなたは見ることができますexecute_intern_function()そしてcheck_identifier()すべての詳細を確認してください。

zsh完全な数値制約が適用されない定義では、関数名を引用/エスケープすることもできます。

zsh$ 666() echo "$0"; \$() echo "$0"
zsh$ 666; $
666
$

答え2

たぶん機能が必要かもしれません。

my_exec(){
   print "foo"
}

これは私のために見つけた。

countryip(){

  COUNTY="$(whois $1 | grep ountry))"
  echo "$COUNTRY $1 \n"

}

$ countryip 192.168.0.1

関連情報