Co robi mały squiggly ~ w Linuksie?

25

Mam dwa przypadki użycia i zastanawiam się, co każdy robi:

  1. service=~

  2. mv ~/Desktop/Service$version.tgz $service

Co robi trochę krucho ~ robić?

Potem, po tym, co by się stało cd $service robić?

O_O
źródło
3
to zasługuje na tag [squiggly]
cregox
3
Tilde jest specyficzny dla powłoki i nie jest specyficzny dla Linuksa.
David Allan Finch
@Cawas: Pytaj, a otrzymasz.
Dave Sherohman
@Dave dzięki! Ale wydaje się, że Chris tego nie znosił. No cóż, życie toczy się dalej ...
cregox
Czy to naprawdę za pierwszym razem, gdy o to zapytano? Spodziewałem się, że zostanie to zamknięte jako duplikat.
Erik B

Odpowiedzi:

44

Ta dziwna rzecz nazywana jest „tyldą”.

Rozszerza się do twojego katalogu domowego.

Próbować

echo ~
echo $HOME

Obie instrukcje umieszczają katalog domowy samodzielnie na linii ..

Widzieć bash Tilde Expansion dla szczegółów.

Mikel
źródło
8
Powyższe porównanie, choć ważne, może być mylące: tylda działa tylko podczas interpretacji powłoki w skryptach i wierszu poleceń. Zmienna środowiskowa $ HOME działa jednak wszędzie tam, gdzie działa zmienna środowiskowa - jest to znacznie więcej miejsc.
Mei
36

„Squiggly” nazywa się tyldą. Jest używany do odwoływania się do twojego katalogu domowego, który jest na Linuksie normalnie /home/username. Jest również przechowywany w $HOME Zmienna środowiskowa. Rozszerzanie ~ do lokalizacji katalogu domowego jest zadanie powłoki (jak zsh lub bash) lub menedżer plików (jak Nautilus), a nie system plików lub system operacyjny.

Możesz również użyć tego, aby odnieść się do katalogu domowego innego użytkownika. Na przykład, jeśli nazwa użytkownika innego użytkownika to bob, możesz odwołać się do ich katalogu domowego za pomocą ~bob, który zostanie rozszerzony na /home/bob/.

Pierwszy podany przykład ustawia zmienną service do ~, więc odpowiada twojemu katalogowi domowemu. To jest równoważne service=/home/username lub service=$HOME.

Drugi przykład kopiuje plik ~/Desktop/Service$version.tgz (lub /home/username/Desktop/Service$version.tgz ) do /home/username. To polecenie jest równoważne:

mv ~/Desktop/Service$version.tgz ~

lub

mv ~/Desktop/Service$version.tgz $HOME

lub

mv ~/Desktop/Service$version.tgz /home/username/

Trzeci zmieni bieżący katalog roboczy ( $PWD ) do /home/username/. Odpowiada to:

cd /home/username/

lub

cd $HOME
Wuffers
źródło
3
Jedna dodatkowa rzecz do zapamiętania: rozszerzenie tyldy jest zadaniem powłoki lub menedżera plików, nie jest funkcją samego systemu plików Linux. Dlatego często nie działa w plikach konfiguracyjnych i dodawanie cudzysłowów wokół „~” spowoduje zatrzymanie jego ekspansji w powłoce.
Grumbel
3
Należy również zauważyć, że katalogi domowe niekoniecznie znajdują się w / home, więc nie należy zakładać, że ~ rozszerza się do / home / [moja nazwa użytkownika] lub że ~ bob rozszerza się do / home / bob
darkliquid
Dziękujemy za sugestię @Grumbel. I dziękuję @ PriceChild za dodanie sugestii @ darkliquid!
Wuffers
10

W obu # 1 i # 2: ~ to twój katalog domowy, więc jeśli jesteś qwerty, prawdopodobnie będzie to katalog / home / qwerty. Więc spróbuj ls ~ żeby to zobaczyć.

Dla # 1: wygląda na to, że usługa zmiennej jest definiowana jako katalog domowy.

Oznacza to, że po # 2 przeniósł plik tgz z podkatalogu Desktop do katalogu domowego, # 3 następnie zmienia się na katalog domowy.

nomaderWhat
źródło
5

Wygląda na to, że polecenia wykonują następujące czynności.

  1. Przypisz zmienną o nazwie usługa do lokalizacji folderu domowego, na przykład:

    /home/user
    
  2. Przenosi plik z pulpitu na najwyższy poziom katalogu domowego, na przykład:

    /home/user/Desktop/Service$version.tgz $service
    
  3. Następnie skrypt zmienia katalog na najwyższy poziom katalogu domowego.

Tak więc wszystko, co robi skrypt, to po prostu wyczyszczenie pulpitu, przenosząc plik na swój /home/user zamiast tego.

James
źródło
1

Dodam, że ~ użytkownik rozwija się także do katalogu domowego [użytkownika], więc nie jest to tylko skrót do twojego posiadać katalog domowy.

Na przykład.:

[guy@abox anotherdir]$ cd ~ 
[guy@abox ~]$ pwd
/home/guy
[guy@abox ~]$ cd ~john
[guy@abox john]$ pwd
/home/john
Rooke
źródło