私の~./bashrc
エイリアスはもはやこのようなワイルドカードを使用しません。
alias x='set -f;. any.sh'
しかし、ワイルドカードを再度有効にするコマンドは何ですか?または、このオプションをどこで設定する必要がありますかany.sh
?
どんな答えでも大歓迎です。
ベストアンサー1
any.sh
bash4.4+
シェルが、with、または - ベースのシェルからコードを解釈するときにのみglobを無効にするには、ash
次のようにします。
x() {
local -
set -o noglob
. any.sh
}
またはzsh
:
x() {
set -o localoptions -o noglob
. any.sh
}
つまり、エイリアスではなく関数を使用してください(複数のコマンドでエイリアスを使用すると、必要に応じて機能しないため、エイリアスを使用したくありませんcmd | x
)。 (変更方法として)cmd && x
オプションを変更する必要があります。$-
参照)ローカル機能を使用し、globを無効にしてファイルをインポートします。
以前のバージョンでは、bash
次のことができます。
x() {
local ret restore
[[ $- = *f* ]] || restore='set +o noglob'
set -o noglob
. any.sh
ret=$?
eval "$restore"
return "$ret"
}
または、次のようなより一般的なヘルパー機能を使用することもできます。
withopt() {
local ret option
local -a restore
option=$1; shift
[[ -o $option ]] || restore=(set +o "$option")
set -o "$option"
"$@"
ret=$?
"${restore[@]}"
return "$ret"
}
その後、必要に応じてエイリアスを使用できます。
alias x='withopt noglob . any.sh'
*
これにより、拡張機能はブロックされません。
x *
このnoglob
オプションは、コマンドが評価されてから長い間最後にアクティブになるためです。これを行うには、次を参照してください。私の他の答え(さまざまな質問に対する回答)。