O que o pequeno rabugento faz no Linux?

25

Eu tenho duas instâncias de que está sendo usado e eu estou querendo saber o que cada um faz:

  1. service=~

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

O que o pequeno rabugento ~faz?

Então, depois disso, o que cd $servicefaria?

O_O
fonte
3
este assim merece uma tag [squiggly]
cregox
3
Tilde, é específico do shell e não específico para o linux.
David Allan Finch
@ Cayas: Peça, e você receberá.
Dave Sherohman
@Dave thanks! Mas parece que Chris odiava. Oh bem, a vida continua ...
cregox
É realmente a primeira vez que isso é solicitado? Eu esperava que isso fosse fechado como duplicado.
Erik B

Respostas:

45

A coisa rabiscada é chamada de "til".

Ele se expande para o diretório inicial.

Experimentar

echo ~
echo $HOME

Ambas as instruções colocam seu diretório pessoal em uma linha.

Consulte bash Tilde Expansion para obter detalhes.

Mikel
fonte
8
A comparação acima, embora válida, talvez seja enganosa: o til só funciona durante a interpretação do shell em scripts e na linha de comando. A variável de ambiente, $ HOME, no entanto, funciona em qualquer lugar em que uma variável de ambiente funcione - o que é muito mais local.
Mei
36

O "ondulado" é chamado de til. É usado para se referir ao seu diretório inicial, que no Linux é normalmente /home/username . Também é armazenado na $HOMEvariável de ambiente. Expandir ~para o local do diretório inicial é o trabalho do shell (como zsh ou bash) ou do gerenciador de arquivos (como o Nautilus) e não do sistema de arquivos ou do sistema operacional.

Você também pode usar isso para se referir ao diretório inicial de outro usuário. Por exemplo, se o nome de usuário do outro usuário for bob, você poderá consultar o diretório inicial com ~bob, o qual será expandido para /home/bob/.

O primeiro exemplo que você deu define a variável servicecomo ~, portanto, corresponde ao seu diretório inicial. Isso é equivalente a service=/home/usernameou service=$HOME.

O segundo exemplo copia o arquivo ~/Desktop/Service$version.tgz(ou /home/username/Desktop/Service$version.tgz) para /home/username. Este comando é equivalente a:

mv ~/Desktop/Service$version.tgz ~

ou

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

ou

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

O terceiro alterará o diretório de trabalho atual ( $PWD) para /home/username/. Isso é equivalente a:

cd /home/username/

ou

cd $HOME
Wuffers
fonte
3
Um aspecto adicional a ter em mente: a expansão Tilde é o trabalho do shell ou do gerenciador de arquivos, não é uma função do próprio sistema de arquivos Linux. Portanto, muitas vezes não funcionará em arquivos de configuração e, ao adicionar aspas em torno de "~", interromperá sua expansão no shell.
Grumbel #
3
Também deve ser observado que os diretórios pessoais não estão necessariamente em / home, portanto, não se deve supor que ~ se expanda para / home / [meu nome de usuário] ou que ~ bob se expanda para / home / bob
darkliquid
Obrigado pela sugestão @Grumbel. E obrigado @PriceChild por adicionar a sugestão de @ darkliquid!
Wuffers
10

Em ambos os nºs 1 e 2: ~ é o seu diretório pessoal, portanto, se você é qwerty, provavelmente será o diretório / home / qwerty. Então tente ls ~ver isso.

Para o número 1: parece-me que o serviço variável está sendo definido como seu diretório inicial.

Isso significa que depois que o nº 2 moveu o arquivo tgz do subdiretório Desktop para o diretório inicial, o nº 3 muda para o diretório inicial.

nomaderWhat
fonte
5

Parece que os comandos estão fazendo o seguinte.

  1. Atribua uma variável chamada serviço ao local da pasta pessoal, por exemplo:

    /home/user
    
  2. Ele move o arquivo da área de trabalho para o nível superior do diretório inicial, por exemplo:

    /home/user/Desktop/Service$version.tgz $service
    
  3. O script altera o diretório para o nível superior do diretório inicial.

Portanto, tudo o que o script está fazendo é apenas limpar sua área de trabalho movendo o arquivo para sua /home/userpasta.

James
fonte
1

Vou adicionar aqui que ~ user também se expande para o diretório pessoal do [usuário], portanto não é apenas um atalho para o seu próprio diretório pessoal.

Por exemplo:

[guy@abox anotherdir]$ cd ~ 
[guy@abox ~]$ pwd
/home/guy
[guy@abox ~]$ cd ~john
[guy@abox john]$ pwd
/home/john
Rooke
fonte