cd ~
robi to samo co
cd $HOME
który jest również taki sam jak
cd /home/tandu
Jednak,
cd ~not-tandu
zmiany w /home/not-tandu
Czy to jest wybór wyłącznie składniowy? Jak cd
radzi sobie z tym jądro (lub plik wykonywalny?) Czy istnieje specjalny przypadek ~
dodania ukośnika, jeśli wszystko inne zostanie pominięte? To znaczy, ~/
i ~
przejdź do tego samego katalogu, ale ~a
jest o jeden katalog wyżej. Tego samego nie można powiedzieć o żadnym innym katalogu, w którym się zmienisz.
cd-command
home
Pigułki przeciwwybuchowe
źródło
źródło
cd
bez żadnych parametrów działa jakcd ~
. Jeśli zastąpicd
sięecho
można zobaczyć do czego wyrazem jest rozszerzany przez powłokę.Odpowiedzi:
~
jest aliasem$HOME
udostępnianym przez wiele powłok, ale$HOME
jest bardziej uniwersalny.$HOME
faktycznie prosi powłokę o wstawienie (zastąpienie) zmiennej środowiskowej HOME tutaj. Istnieje wiele różnych zmiennych środowiskowych, które można zastąpić, spróbuj uruchomićenv
listę. Pamiętaj, że~
nie zawsze jest rozpoznawane, gdy nie ma na początku słowa. Wypróbuj te dwa polecenia do porównania:Pierwszy jest przekazywany do pliku wykonywalnego ls,
/~
który następnie próbuje spojrzeć na plik wywołany~
w katalogu głównym, drugi jest rozszerzany$HOME
i staje się,//home/user
który jest następnie przekazywany do pliku wykonywalnego ls jako argument wiersza poleceń. Wszystkie systemy POSIX (POSIX jest standardem działania systemów UNIX i Linux) pozwalają na traktowanie wielu ukośników tak samo jak jednego ukośnika, więc//home/user
to samo co powiedzenie/home/user
.~username
jest skrótem od polecenia powłoki, aby szukała nazwy użytkownika w pliku passwd i zwróciła swój katalog domowy. Nie ma równoważnej zmiennej środowiskowej. Wszystkie te podstawienia są wykonywane przez powłokę i są obsługiwane przez większość z nich, ale tylko takie zmienne środowiskowe$HOME
są obsługiwane przez wszystkie powłoki. Również,cd
jest właściwie wbudowanym poleceniem. Jest to specjalna dyrektywa, która nakazuje samej powłoce zmianę katalogów. To nie jest tak, jak inne wbudowane powłoki, które mogą być zaimplementowane jako osobne pliki wykonywalne,echo
ponieważ są używane do zmiany podstawowego atrybutu procesu powłoki.echo
jest jedynie powłoką wbudowaną ze względu na wydajność, ale w dawnych czasach UNIX był dostępny tylko jako własny plik wykonywalny/bin/echo
.źródło
~foo
oznacza „katalog domowy użytkownika foo”.Jądro tego nie robi, jest interpretowane przez powłokę. Ilekroć powłoka widzi
~foo
argument, w sposób przejrzysty zastępuje go katalogiem domowym użytkownikafoo
i przekazuje go na swoje miejsce. Więc kiedy uruchomiszcd ~tandu
, powłoka faktycznie działacd /home/tandu
.źródło
cd
jest skorupa? Co jeśli nie korzystasz z powłoki? Czy to proste „jeśli po czymś coś się rozwija, rozwija się inaczej?” czy jest jakiś inny sposób postępowania w przypadku tego wyjątkowego stanu?cd
, nie ma zewnętrznego pliku wykonywalnego (nie byłoby to możliwe)exec(2)
), rozszerzenie powłoki nie ma miejsca. Bez rozszerzenia powłoki~
nic nie zostanie zastąpione - to po prostu kolejna doskonale poprawna postać. To mnie ugryzło we wczesnych dniach SunOS, ponieważ/bin/sh
nie miałem problemów~
.~
następnie nazwa użytkownika rozwija się do katalogu domowego tego użytkownika.źródło