私は次の行を実装してみました.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=val
bashは正規表現で定義された文字を含むエイリアスを拒否します。
[ \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 エイリアス
シェルコマンド言語では、下線、数字、移植可能な文字セットの文字のみで構成される単語と、次の文字のいずれか:
!
、、、、。%
,
@
実装では、エイリアスの追加文字を拡張子として受け入れることができます。
したがってbash
、zsh
(別名で直接使用できる/
)はすべて標準範囲内です。
関数名のスラッシュやその他の興味深い文字
bash
とでは、関数名にzsh
aを直接使用できます。/
$ /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