Se você quiser que os globs sejam desativados somente enquanto o shell estiver interpretando o código em any.sh
, com os shells bash4.4+
ou ash
-based, você pode fazer:
x() {
local -
set -o noglob
. any.sh
}
Ou em zsh
:
x() {
set -o localoptions -o noglob
. any.sh
}
Isso é usar uma função em vez de um alias (você não quer usar aliases para vários comandos, pois isso não faz o que você quer quando você faz cmd | x
ou cmd && x
, por exemplo), certifique-se de que as alterações para opções (para a variável $-
como uma maneira de olhar para ela) são locais para a função, desabilitar glob e fonte do arquivo.
Com versões mais antigas de bash
, você poderia fazer:
x() {
local ret restore
[[ $- = *f* ]] || restore='set +o noglob'
set -o noglob
. any.sh
ret=$?
eval "$restore"
return "$ret"
}
Ou talvez uma função auxiliar mais genérica como:
withopt() {
local ret option
local -a restore
option=$1; shift
[[ -o $option ]] || restore=(set +o "$option")
set -o "$option"
"$@"
ret=$?
"${restore[@]}"
return "$ret"
}
E então, você pode usar um apelido se quiser:
alias x='withopt noglob . any.sh'
Observe que isso não impede que *
seja expandido se você fizer isso:
x *
Como a opção noglob
acaba sendo ativada por muito tempo depois que o comando foi avaliado. Para isso, veja minha outra resposta (uma resposta para uma pergunta diferente).