Każda zmienna, którą deklaruję w moim zshrc
jest dostępny w powłoce jako zmienna środowiskowa. Nie chcę tego.
Próbowałem wstawić zmienne do funkcji i ustawić je jako lokalne, ale wtedy funkcja jest dostępna poza zshrc
.
Jak mogę to zrobić co dzieje się w moich zshrc pozostaje w moim zshrc?
Odpowiedzi:
16 dla odpowiedzi nr 1Są one dostępne, ale nie są eksportowane, więc skrypty uruchamiane z wiersza poleceń nie otrzymują tych zmiennych. Jeżeli twój .zshrc
wygląda jak
function zshrc()
{
local VAR=1
# Do stuff
}
zshrc
a ty nigdy nie chcesz uruchomić zshrc
znowu możesz to zrobić
unfunction zshrc
potem.
28 dla odpowiedzi nr 2
Jeśli używasz najnowszej wersji Zsh, możesz użyć anonimowej funkcji:
function () {
local xyz=abc
# whatever
}
Funkcja zostanie automatycznie wykonana, a następnie wyrzucona, istnieje tylko w celu scopingu.
To działa dla dowolny plik źródłowy, nie tylko zshrc.
5 dla odpowiedzi nr 3
Jeśli nie dodasz słowa local
do zmiennej pozostanie, dopóki nie wykonasz jednej z poniższych czynności:
- Otwórz nowe okno terminala.
- Biegać
exec zsh
lubexec bash
w zależności od twojej powłoki. Spowoduje to wyczyszczenie zmiennych lokalnych, które nie zostały przypisane do słowalocal
.
Unikaj tego
method_name(){
a=11
echo $a
}
Prawidłowy przykład
method_name(){
local a=11
echo $a
}
Ta zmienna jest ograniczona do nazwy funkcji method_name
i dostępne tylko wewnątrz funkcji po wywołaniu (a nie później).
Jeśli chcesz mieć bezpośredni dostęp do tej zmiennej lokalnej, możesz ustawić ją w ten sposób
local z=11
I nazwij to w ten sposób
echo $z
W zależności od twojej powłoki i potrzeb możesz użyć .bash_profile
lub .bashrc
lub .zshrc
itp. do przechowywania funkcji i aliasów.
Możesz szybko wyświetlić zmienne środowiskowe za pomocą env
lub printenv
Konwencja ma wykorzystywać UPPERCASE
Aby tymczasowo ustawić zmienną środowiskową (przechowywaną aż do zamknięcia terminala)
export A=11
lub export B="11 is part of this string"
Zakładając, że otworzyłeś nowe okno terminala lubpochodzą .zshrc lub .bashrc lub zależnie od tego, którego używasz, możesz teraz używać tej zmiennej środowiskowej, dopóki nie zamkniesz sesji terminala. Uwaga: nie używaj $ podczas ustawiania, ale używaj $, gdy odwołujesz się do zmiennej.
Przykłady
echo "A is equal to: $A and that is pretty nice"
echo "$A"
Jak pozyskać plik
source ~/path/to/file/filename
Przykład
source ~/.bash_profile
Aby ustawić zmienną środowiskową (dopóki jej nie usuniesz lub nie ustawisz ponownie)
Użyj powyższego kodu, ale umieść go w swoim ~ / .bash_profile lub ~ / .zshrc lub innym odpowiednim pliku. Zapisz plik i pobierz go.
Przykład
export B="11 is part of this string"
Możesz teraz wyświetlić to za pomocą
env
Aby usunąć tę zmienną środowiskową, usuń ją z pliku i ponownie pobierz plik.
Aby tymczasowo usunąć zmienną środowiskową, użyj opcji unset
Przykład
unset B
Zauważ, że nie ma $
podczas rozbrajania.
Aby ustawić zmienne środowiskowe z wiersza poleceń
export BLABLA="environment variable set from the command line, saved in file for later use"
Sprawdź plik, do którego go wysyłasz, może nie zaczynać się od nowego wiersza, może być połączony z ostatnią linią, która była inną funkcją, aliasem lub innym.
To nie jest w pełni kompleksowa odpowiedź, ale jest to wielki krok we właściwym kierunku. Pokazuje, jak można ustawić, użyć i usunąć zasięg w powłoce terminala.