Jak usunąć ustawienie zmiennej w wierszu poleceń?

Próbowałem wykonać następujące polecenie, aby ustawić serwer proxy na yaourt:

export ALL_PROXY=http://proxy.example.com:8080 

Pytanie brzmi, jak wyłączyć serwer proxy na yaourt? Ogólnie, jak mogę usunąć wartość zmiennej w bieżącej powłoce?

Komentarze

  • Spróbuj unset ALL_PROXY
  • @coffeMug równie dobrze może uczynić z tego odpowiedź, możesz też rozważyć kradzież informacji stąd: stackoverflow.com/a/12263914 / 1081936
  • oprócz zaakceptowanej odpowiedzi, jeśli istnieje ' polecenie, które często uruchamiasz, które używa zmiennej środowiskowej, którą ' d raczej nie ustawiaj ani nie zmieniaj przez resztę sesji powłoki, możesz go uruchomić na przykład: $ ALL_PROXY=http://proxy.example.com:8080 yaourt, który ustawi zmienną środowiskową tylko dla polecenia uruchom . Przed wykonaniem polecenia możesz umieścić dowolną liczbę FOO=bar BAZ=bat zmiennych.

Odpowiedz

Aby usunąć zmienną środowiskową, uruchom

unset ALL_PROXY 

Zwróć uwagę, że zmienna środowiskowa działa tylko w programie i programie, uruchamia się. Jeśli ustawisz zmienną środowiskową w jednym oknie powłoki, nie wpłynie to na inne okna powłoki.

Jeśli dodałeś export ALL_PROXY=… do pliku inicjalizacyjnego, usuń stamtąd.

Możesz uruchomić export bez argumentów, aby zobaczyć, jakie zmienne środowiskowe są ustawione w bieżącej powłoce.

Pamiętaj, że aby udostępnić zmienną powłoki programom uruchamianym przez tę powłokę, musisz ją wyeksportować, albo uruchamiając export VAR po przypisaniu VAR=VALUE lub łącząc te dwa elementy (export VAR=VALUE).

Komentarze

  • Myślę, że nie jest konieczne, aby export VAR występował po przypisaniu. Obserwuj: sh -c 'export F; F=2; sh -c "echo F2=\$F"; echo F1=$F' drukuje " F2 = 2 \ nF1 = 2 ".
  • unset jest również wymagany do wyczyszczenia asocjacyjnych tablic bash (np. bash " tablice skrótów " lub " dicts "), jak wyjaśniono w tym samouczku w sekcji zatytułowanej " Czyszczenie ": artificialworlds.net/blog/2012/10/17/… .

Odpowiedź

Aby usunąć powiązaną zmienną w bash, użyj unset VARIABLE (w twoim przypadku unset ALL_PROXY). To polecenie faktycznie usuwa zmienną. Możesz również ustawić wartość zmiennej jako pustą, wykonując

VARIABLE= 

lub

VARIABLE="" 

Różnica polega na tym, że dwa ostatnie polecenia nie usuwają zmiennej. Różnicę można zobaczyć, używając flagi -u z set aby zmusić go do traktowania nieustawionych zmiennych jako błędu podczas podstawiania:

/home/user1> var="" /home/user1> echo $var /home/user1> set -u /home/user1> echo $var /home/user1> unset var /home/user1> echo $var -bash: var: unbound variable 

W powyższym przykładzie bash narzeka na var jest niezwiązany (po usunięciu jego wartości), co jest oczekiwanym błędem (zwróć uwagę, że nie dzieje się to w drugim poleceniu echo, co oznacza, że var ma wartość empty lub null).

Komentarze

  • co jeśli mam zmienną w swoim pliku skryptu powłoki i źródłuję ten plik, więc jak mam to usunąć?
  • @Abhinav użyj unset w skrypcie. To samo dotyczy.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *