Mój .bashrc zawierał powtarzający się kod, więc użyłem funkcji, aby go uprościć
do_stuff() {
local version=$1
export FOO_${version}_X="17"
export FOO_${version}_Y="42"
}
do_stuff '5.1'
do_stuff '5.2'
Jednak teraz, gdy używam mojej powłoki, nazwa „do_stuff” jest w zasięgu, więc mogę uzupełnić tabulatorami i uruchomić tę funkcję (potencjalnie psując moje zmienne środowiskowe). Czy istnieje sposób, aby „do_stuff” był widoczny tylko w .bashrc?
()
podpowłoki. Inną możliwością dla prostych przypadków jest użyciefor version in 5.1 5.2
pętli, chociaż pozwala to naversion
ucieczkę.Odpowiedzi:
Użyj
unset
jako ostatniej linii w.bashrc
:usunie / rozbroi funkcję
do_stuff
.Aby usunąć / rozbroić zmienne, wywołaj je w następujący sposób:
źródło
if type do_stuff >/dev/null 2>&1; then echo "exists"; else echo "dont"; fi
.do_stuff
zostanie użyte w innej funkcji. Po wywołaniu tej funkcji otrzymaszbash: do_stuff: command not found
. Wiem, że nie jest to dokładnie ten przypadek, o którym mówiła operacja, ale warto to podkreślić.Inną opcją jest użycie podkreślników, takich jak w innych językach skryptowych, aby wskazać, że nie zamierzasz upubliczniać tej funkcji. Prawdopodobieństwo, że wpiszesz _do_foo, jest dość małe i mało prawdopodobne, aby powodowało konflikt z kimkolwiek innym.
źródło
Jedyne rozwiązanie, jakie mogę wymyślić, to podkreślenie go i nadanie mu dość unikalnej nazwy, może nawet przestrzeni nazw z kropkami jak wymyślny język ( ale to nie zadziała w waszych czasach
sh
).Cholera, nie będzie żadnych konfliktów:
źródło
Jak sugerowano w komentarzu, możesz użyć podpowłoki:
Budujemy kolejny skrypt na standardowym wyjściu podpowłoki dla jedynego pożądanego efektu ubocznego (używając
here
dokumentu<<SIDE
). Następnie zaopatrujemy się w.
.Siła „mise en abime”
sh
jest przerażającym źródłem cudów.źródło