Wygląda na to, że nie zrobiłeś tego poprawnie.
Podejrzewam, że próbujesz zrobić trzecią rzecz, ale używasz złej składni. Pięć typowych błędów, które mogą powodować błędy takie jak to, co widzisz:
Używanie spacji zamiast =
. export NAME value
jest nieprawidłowe; value
jest następnie interpretowane jako nazwa kolejnej zmiennej do wyeksportowania.
(Dzieje się tak, ponieważ export NAME1 NAME2
jest poprawna składnia do eksportowania wielu zmiennych).
Rozmieszczanie przestrzeni =
. W wielu językach programowania jest to zarówno poprawne, jak i preferowane stylistycznie, aby wstawiać operatorów ze spacjami przez większość czasu. Ale aby przypisać wartość do zmiennej w skrypcie powłoki (lub w innej sytuacji, w której wydajesz polecenia powłoki), jest to niedozwolone. NAME = value
(w export
poleceniu lub w inny sposób) nie będzie działać; musisz użyć NAME=value
.
( export NAME = value
próbuje wyeksportować zmienne o nazwach NAME
, =
i value
. Na szczęście nigdy nie wydaje się, że się to udaje po cichu, ponieważ próba wyeksportowania zmiennej o nazwie =
jest błędem składniowym. W przeciwieństwie do export NAME= value
tego wydaje się działać, ale nie przypisuje value
do - NAME
zamiast tego przypisuje puste, łańcuch o zerowej długości NAME
i eksportuje go, a osobno eksportuje zmienną value
. Oba są częstymi błędami).
Oddzielanie części wartości zmiennej spacjami. Zmienne środowiskowe mogą zawierać spacje, ale w praktyce rzadko są używane jako separatory pól w zmiennych środowiskowych. Gdy pojedyncza zmienna celowo zawiera wiele ścieżek, zwykle :
służy do ich rozdzielenia.
Brak cytowania spacji podczas przypisywania do zmiennych. Czasami wartość zmiennej środowiskowej powinna zawierać spację. Na przykład może to być nazwa katalogu, który naprawdę zawiera spację. W takim przypadku należy podać dowolne spacje.
Jednym ze sposobów na to jest ich poprzedzenie \
. Zobacz Jak mogę chronić nawiasy przekazywane do polecenia cd? i Nie można usunąć pliku w celu uzyskania informacji o innych sposobach - zastosowanie mają metody przedstawione w odpowiedziach, nawet jeśli żadne pytanie nie dotyczy przypisania zmiennych środowiskowych.
Na przykład oto kilka sposobów eksportowania zmiennej środowiskowej SILLYPATH
o wartości /home/ek/silly name/bin
:
export SILLYPATH=/home/ek/silly\ name/bin
export SILLYPATH='/home/ek/silly name/bin'
export SILLYPATH="/home/ek/silly name/bin"
Często gdy folder, którego musisz użyć w powłoce lub przypisać do powszechnie używanej zmiennej środowiskowej, zawiera spację, zmiana nazwy może być korzystna. (Ale czasem jest to niepraktyczne lub niepożądane).
Przypisywanie i / lub eksportowanie zmiennej, gdy nic nie trzeba było robić. To rodzaj meta-błędu; konkretny problem techniczny jest często jednym z powyższych, ale rozwiązaniem jest pozbyć się linii przestępczej lub jej części, zamiast ją naprawić. .bashrc
Oczywiście nie usuwaj bezkrytycznie kodu . Ale export
może zostać dodany przypadkowo lub może przypadkowo mieć w nim więcej kodu, niż zamierzano. Załóżmy na przykład, że chciałeś napisać:
echo 'export PATH=~/some.bin:"$PATH"' >>~/.bashrc; . ~/.bashrc
To by się dołączyło .bashrc
, a następnie ponownie go źródło. Załóżmy jednak, że zamiast tego napisałeś:
echo 'export PATH=~/some.bin:"$PATH" . ~/.bashrc' >>~/.bashrc # WRONG!
Wtedy twoje export
polecenie nie tylko wyeksportuje zwiększoną wartość PATH
, ale również spróbuje wyeksportować zmienne o nazwach .
i , co nie jest tym, czego chcesz. Ponieważ zawierają znaki, które są zabronione w nazwach zmiennych, więc przy każdym uruchomieniu nowej interaktywnej powłoki bash otrzymasz błąd./home/your-username/.bashrc
Aby uniknąć tego problemu, sugeruję edytowanie .bashrc
w edytorze (np. nano ~/.bashrc
, gedit ~/.bashrc
) Zamiast przekierowywania wyjścia na jego koniec za pomocą >>
.