Use unset
como última linha no seu .bashrc
:
unset -f do_stuff
irá apagar / desmarcar a função do_stuff
.
Para excluir / desmarcar as variáveis, chame-o da seguinte forma:
unset variablename
Meu .bashrc tinha algum código que era 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 uso meu shell, o nome "do_stuff" está no escopo para que eu possa concluir a tabulação e executar essa função (possivelmente bagunçando minhas variáveis de ambiente). Existe uma maneira de tornar o "do_stuff" visível apenas dentro do .bashrc?
A outra opção é usar sublinhados como em outras linguagens com 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 é improvável que entre em conflito com mais ninguém.
A única solução em que consigo pensar é enfatizá-lo e dar-lhe um nome bem único, talvez até mesmo um namespace com pontos como uma linguagem de fantasia ( mas isso não funcionará em ye olde sh
).
Heck, isso não terá conflitos:
_my_foobar_method_91a3b52d990f4a9f9d5d9423ec37b64c () {
# Custom proprietary logic protected ID 10 T intellectual property copyright clauses.
cat <<< 'echo $(xargs printf <<< "$1")'; }
}
Como sugerido em um comentário, você pode usar um subshell:
#!/bin/bash
. <(
do_stuff() {
local version="$1" valid='^\w+$'
[[ "$version" =~ $valid ]] &&
cat <<SIDE || echo "$FUNCNAME: invalid '$version'" >&2
export FOO_${version}_X=17
export FOO_${version}_Y=42
SIDE
}
do_stuff 5.0 # FOO_5.0_X is "not a valid identifier"
do_stuff 5_1
do_stuff 5_2
)
do_keep() { :; } # just get sure the report below actually works
set | egrep '(do_|FOO_)' | sed -e 's,^,set:\x09,'
Criamos outro script na saída padrão subshell para o único efeito colateral que desejamos (usando here
document <<SIDE
). Então nós procuramos com .
.
O poder de 'mise en abime' em sh
é uma fonte assustadora de admiração.