Gostaria de saber se o cd sozinho me envia para minha pasta pessoal e o cd ~ faz o mesmo, por que o ~ foi adicionado em primeiro lugar?
É algo específico para o BASH ou eles se comportariam de maneira diferente em outro Shell?
cd-command
home
Luis Alvarado
fonte
fonte
cd ~
vscd $HOME
vscd ~not-tandu
. Esta questão está perguntando sobrecd
vscd ~
.Respostas:
O
~
pode ser usado para mais do que apenas isso. Qualquer comando pode lucrar com um atalho para a pasta pessoal. Portanto, não é necessário se você deseja entrar em casa, mas e quanto~/.config
?Caso contrário, você teria que escrever o caminho inicial, usar o
$HOME
var ou fazer doiscd
s. Também para copiar ou mover arquivos:Como a maioria dos arquivos está em casa, é sempre bom ter um atalho.
fonte
~
é fazercd ~user/download
para ir para o diretório de download de um usuário.Fazendo
cd
é basicamente chamandocd
sem argumentos e de acordo comcd
o comportamento "... se dir não for fornecido, o valor da variável HOME shell é o padrão." (do manual do bash ). Por outro lado,cd ~
é quando você fornece um argumento aocd
comando, o que acontece~
e o shell executará a expansão do til . No que diz respeito ao diretório inicial do usuário - não há diferença. Nos dois casos,HOME
a variável de ambiente será consultada:Efetivamente, isso também não tem diferença de
cd $HOME
. No entanto, enquantocd
fará uma única coisa, o til pode ser usado para executar outras expansões, como~+
no diretório de trabalho atual.No entanto, curiosamente, podemos
unset HOME
quebrar,cd
mas~
ainda funcionará:Por quê ? Mais uma vez, responda no manual:
Observe que a desarmação é diferente da variável vazia
HOME=
e tem efeito. A documentação fala especificamente sobre a variável não configurada. Tornar variável igual a string vazia tem efeito oposto ao que esperávamos:Aqui você pode ver que criar
HOME
cadeias vazias quebra ocd
comportamento e o comportamento.Tilde e
$HOME
tem um pouco de diferença e razão de existência diferente.$HOME
é uma variável do shell, que também por coincidência é uma das variáveis de ambiente - e está disponível para todos os programas; em C você usariaenviron()
para acessar isso. Por outro lado,tilde
é a sintaxe específica do shell que executa a expansão de til, embora você possa usar awordexp()
função para executar a expansão semelhante ao shell ( referência ) em C também.A razão pela qual
~
representaHOME
foi respondida nesta pergunta : uma vez o caractere til compartilhou a mesma chaveHOME
no terminal Lear-Siegler ADM-3A.HOME
por outro lado, é uma variável de ambiente que tinha significado puramente simbólico e nenhuma representação física.Além disso, o fato de
HOME
ser uma variável de ambiente nos permite desmarcá-la, onde, como não podemos definir~
outra coisa por meios simples.Observe a linha em branco onde primeiro
echo
gera a variável não definida e o fato disso. Por outro lado, não podemos fazer coisas desse tipo:No entanto, alterar
HOME
afeta~
:Além disso, como
~
também funciona como caractere de expansão, podemos fazer coisas assim para mostrar o diretório de trabalho atual:Enquanto que, se queremos fazer isso por meio de variáveis de ambiente, precisamos
PWD
eHOME
permanecemos os mesmos, ou se você fizer coisas comoecho $HOME+
- isso é apenas concatenação de cadeias / variáveis. Mas, novamente,~+
retira informações das variáveis de ambiente:NOTA : as expansões
~+
e~-
funcionamksh
, mas não dentrodash
.Para responder a algumas de suas perguntas específicas:
Não, esse deve ser um comportamento consistente.
ksh
,dash
Ecsh
- todos se comportam mesma comcd
oucd ~
.Eu diria conveniência e razões históricas, conforme explicado na resposta vinculada sobre til. Eventualmente, cresceu para executar mais do que apenas expansão do diretório inicial.
fonte
Independentemente se você está vários níveis de pastas acima ou abaixo
$HOME
, os comandoscd
ecd ~
fazer a mesma coisa e não diferem - ele vai mandar de volta para o seu diretório HOME.NO ENTANTO: Quando você está 1 ou mais níveis de pasta acima de HOME e deseja ir DIRETAMENTE para um subdiretório 1 ou mais níveis de pasta abaixo
$HOME
, o til (~
) é útil ao salvar as teclas pressionadas quando usado para substituir o texto necessário para consultar ao$HOME
digitar umcd
comando. Por exemplo;fonte
~ significa / home / local do nome de usuário, para economizar tempo ao digitar. Por exemplo, cd / home / nome de usuário / Downloads é o mesmo que cd ~ / Downloads, mas menos digitação. Ambos os comandos fazem o mesmo, altere o diretório de trabalho para esse local.
fonte
root
O diretório pessoal do Eg geralmente está fora de campo/home