Meu .bashrc tinha algum código repetitivo, então usei uma função para simplificá-lo
do_stuff() {
local version=$1
export FOO_${version}_X="17"
export FOO_${version}_Y="42"
}
do_stuff '5.1'
do_stuff '5.2'
No entanto, agora quando eu uso meu shell, o nome "do_stuff" está no escopo para que eu possa completar com tabulação e executar essa função (potencialmente atrapalhando minhas variáveis de ambiente). Existe uma maneira de tornar "do_stuff" visível apenas dentro do .bashrc?
()
para criar um subshell. Outra possibilidade para casos simples é usar umfor version in 5.1 5.2
loop, embora isso permitaversion
escapar.Respostas:
Use
unset
como última linha no seu.bashrc
:excluirá / desabilitará a função
do_stuff
.Para excluir / desabilitar as variáveis, invoque-o da seguinte maneira:
fonte
if type do_stuff >/dev/null 2>&1; then echo "exists"; else echo "dont"; fi
.do_stuff
for usado dentro de outra função. Quando você chama essa função, você recebebash: do_stuff: command not found
. Sei que esse não é o caso exato em que a operação estava falando, mas vale a pena ressaltar.A outra opção é usar sublinhados, como em outras linguagens de script, para indicar que você não pretende que essa função seja pública. A probabilidade de você digitar _do_foo é muito pequena e também não deve entrar em conflito com ninguém.
fonte
A única solução em que consigo pensar é enfatizá-lo e dar a ele um nome bastante exclusivo, talvez até mesmo colocando-o com pontos como uma linguagem de fantasia ( mas isso não funcionará em você
sh
).Caramba, isso não terá conflitos:
fonte
Conforme sugerido em um comentário, você pode usar um subshell:
Criamos outro script na saída padrão do subshell para o único efeito colateral que desejamos (usando o
here
documento<<SIDE
). Então nós fonte com.
.O poder da mise en abime
sh
é uma fonte assustadora de admiração.fonte