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 valuejest nieprawidłowe; valuejest 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 exportpoleceniu lub w inny sposób) nie będzie działać; musisz użyć NAME=value.
( export NAME = valuepró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= valuetego wydaje się działać, ale nie przypisuje valuedo - NAMEzamiast tego przypisuje puste, łańcuch o zerowej długości NAMEi 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 SILLYPATHo 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ć. .bashrcOczywiście nie usuwaj bezkrytycznie kodu . Ale exportmoż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 exportpolecenie 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 .bashrcw edytorze (np. nano ~/.bashrc, gedit ~/.bashrc) Zamiast przekierowywania wyjścia na jego koniec za pomocą >>.