Jest linia, w ~/.profile
której jest
PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
Nie jestem pewien co do ostatniego i
.
- Czy powinienem to usunąć?
- Czy to nie błąd składniowy?
bash
environment-variables
Uśmiech
źródło
źródło
$PATH
zmiennej środowiskowej, ale wcale nie są duplikatami. Co najwyżej są powiązane. To pytanie jest problemem, w~/.profile
którym akurat jest dodatkowym znakiem w linii, do której$PATH
przypisane jest środowisko.PATH=
wiersz w wierszu~/.profile
- co jest tutaj prawdziwym pytaniem.Odpowiedzi:
Nie, to nie jest błąd składniowy; to tylko litera, która jest dołączana po rozwinięciu
$PATH
, ponieważ powłoka usuwa cudzysłowy ...Tak więc, oprócz przygotowywania lokalnych katalogów, skutecznie usunęło istniejące
/snap/bin
z mojej ŚCIEŻKI i dodało nieistniejące/snap/bini
.Możesz usunąć,
i
aby naprawić ŚCIEŻKĘ.Aby zobaczyć zmianę, musisz się wylogować i ponownie zalogować lub uruchomić
source ~/.profile
w dowolnej używanej powłoce (lub uruchomić powłokę za pomocąbash -l
), ponieważ.profile
jest ona odczytywana tylko przez powłoki logowania .Jeśli sam nie wprowadziłeś tej zmiany
.profile
, możesz przywrócić plik domyślny, uruchamiając goSpowoduje to zmianę nazwy starego
.profile
.profile.old
(możesz także usunąć plik, jeśli chcesz) i zastąpienie go domyślną wersją systemu/etc/skel
.źródło
Myślę, że tutaj nie jest jasne, co oznacza następujące wyrażenie:
Pierwsza część
PATH=
oznacza, że przypisujemy nową wartość do zmiennej (środowiskowej)$PATH
.Druga część to nowa wartość tej zmiennej. W bieżącym przypadku zmienna
$HOME
zostanie rozwinięta o bieżącą wartość i do tej wartości zostanie dołączony ciąg/bin:
. To samo dotyczy kolejnej części łańcucha$HOME/.local/bin:
. Na koniec bieżąca (poprzednia) wartość$PATH
zmiennej zostanie rozwinięta i dołączona. Okrężnica:
odgrywa rolę ogranicznika wPATH
wyrażeniu.Celem jest ostatecznie napisać:
PATH=<some additional paths>+<the the current value of $PATH>
. Umieszczamy te dodatkowe ścieżki przed ciągiem, ponieważ chcemy, aby powłoka najpierw szukała plików wykonywalnych w tych lokalizacjach, a dopiero potem w całym systemie.Postać
i
jest niepotrzebna. Zostanie dołączony do nowej wartości$PATH
i spowoduje bałagan, jak wyjaśnia @Zanna w swojej odpowiedzi .źródło
Tak, to błąd składniowy, rzeczywisty
.profile
powinien wyglądać tak, chyba że zmieniłeś coś (jest to wersja 17.10, zobacz uwagi poniżej):Może to wyglądać inaczej w starszych wersjach Ubuntu, w których sprawdzenie, czy
bin
katalog użytkowników jest obecny, nie zostało uwzględnione w.profile
. Najprostszym sposobem na sprawdzenie, jak powinien on wyglądać, jest spojrzenie/etc/skel/.profile
.Aby dodać zgodnie z prośbą w komentarzu, po prostu umieść to na końcu pliku profilu:
Jeśli kiedykolwiek zepsujesz całkowicie swój profil, istnieje kopia, z której możesz pobrać nowy
/etc/skel/
.źródło
/etc/skel/.profile
w 16.04 wygląda inaczej, bez testu, czy"$HOME/bin"
istnieje. Nawet jeśli był to lepszy wariant (IMO), wydaje się, że został zmieniony w 17.10 - z jakiegoś powodu lub przez pomyłkę.