Como funciona o ~ /? [duplicado]

10

No terminal, uma maneira de fazer referência a casa é usando ~/ . Eu não entendo como isso funciona, porque a saída de file ~/ é:

/home/admin/: directory

e apenas executando ~/ resulta em:

-bash: /home/admin/: Is a directory

Então, o que está convertendo ~/ em /home/admin ?

~/ também parece funcionar em /bin/dash , portanto, também sei que não é bash específico.

    
por NerdOfLinux 24.04.2018 / 16:07

2 respostas

15

Esta é a expansão do til .

A expansão de til é requerida por POSIX (veja primeira página vinculada ) e aparece em todos os Bourne modernos conchas de estilo . Isso inclui os shells populares bash , ksh93 e zsh , mas também shells mais minimalistas como mksh , dash e busybox ash .

Na prática, diferentes invólucros compatíveis com POSIX às vezes diferem nos detalhes precisos da expansão do til, tanto no caso não especificado que HOME seria usado, mas está indefinido ou vazio, e para permitir que ~ de notação seja usada para outras finalidades que expandir os diretórios iniciais dos usuários. Por exemplo, a expansão do til em bash também fornece uma abreviação para acessar o valores das variáveis PWD e OLDPWD , com ~- e ~+ , respectivamente.

No entanto, nos casos típicos, funciona do mesmo modo nos invólucros do estilo Bourne. Estes são casos típicos (mas note que esta forma de separar eles não é oficial, é apenas a minha maneira de apresentar o material):

  • ~ ou ~/ por si só expande para o seu diretório pessoal.
  • ~/ seguido por mais componentes de caminho se expande para um caminho que começa no seu diretório inicial.
  • ~username ou ~username/ por si só expande para o diretório inicial do usuário cujo nome de usuário é username .
  • ~username/ seguido por mais componentes de caminho se expande para um caminho que começa no diretório inicial do usuário cujo nome de usuário é username .
por Eliah Kagan 24.04.2018 / 16:26
5

~ é 'abreviação' para $HOME

~ é uma forma abreviada de escrever $HOME em outras palavras, seu diretório pessoal. Ele funciona em shells (por exemplo, bash ) e é chamado de 'expansão de til'.

Se você adicionar uma barra à direita, significa que está falando sobre um diretório.

Exemplos:

$ ls -d ~/
/home/sudodus/
$ ls -d ~
/home/sudodus
$ ls -d $HOME
/home/sudodus

$ sudo -i
[sudo] lösenord för sudodus: 
# ls -d ~/
/root/
# ls -d ~
/root
# exit
logout

$ ls xournal.png
xournal.png

$ LANG=C ls xournal.png/
ls: cannot access 'xournal.png/': Not a directory
    
por sudodus 24.04.2018 / 16:25