/ / Jak zachować funkcje / zmienne lokalne dla mojego Zshrc? - zsh, zshrc

Jak zachować funkcje / zmienne lokalne dla mojego Zshrc? - zsh, zshrc

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 1

Są 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:

  1. Otwórz nowe okno terminala.
  2. Biegać exec zsh lub exec bash w zależności od twojej powłoki. Spowoduje to wyczyszczenie zmiennych lokalnych, które nie zostały przypisane do słowa local.

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.

Zobacz to odwołanie, aby dowiedzieć się więcej o zmiennych środowiskowych i ich odpowiednich powłokach

Przeczytaj również to, aby zrozumieć, jak ustawić zmienne środowiskowe w wierszu poleceń za pomocą rozszerzeń powłoki

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.