Defina o atalho de comando permanente no terminal para cd para Downloads [duplicate]

5

Eu escrevi um novo arquivo de texto em /bin chamado ram , que contém:

watch -n 1 free -h

e um arquivo sen :

watch -n 1 sensors

na mesma pasta, para evitar digitar

watch blahblahblah...

todas as vezes.

Além disso, alterei as permissões desses dois de

-rw-r--r--

para

-rw-r--r-x

e alcançou meu objetivo. Funcionou mesmo depois de reabrir o shell, ou seja, eu poderia digitar ram em vez de watch -n 1 free -h

Mas, o problema foi encontrado depois que eu tentei o mesmo procedimento para

cd /home/myname/Downloads/

e novo arquivo de texto salvo em /bin e denominado dow , mesmo com permissões.

Desta vez dow não faz nada no terminal, mesmo não mostrando nenhuma mensagem.

Eu tentei salvar o mesmo arquivo em /usr/bin , mas novamente o terminal não faz nada e meu diretório de trabalho não muda.

Como isso é possível?

    
por mk1024 23.03.2018 / 21:02

2 respostas

7

Você escreveu um script e funciona. Ele simplesmente não faz o que você quer, porque um script é executado em um shell separado do shell que o chama.

O shell no qual o script é executado faz exatamente o que o script diz; ele altera seu diretório de trabalho para ~/Downloads . Não há mais nada para fazer, então sai. O diretório do shell de chamada não foi alterado.

Você não precisa aceitar minha palavra - você pode demonstrar isso adicionando ls na próxima linha do seu arquivo dow . O conteúdo do diretório ~/Downloads (supondo que tenha algum) será listado quando você executar o comando (sem as cores usuais, que são fornecidas por um alias no seu ~/.bashrc que as shells não interativas não leem) .

Para executar um script no shell atual, você pode usar o comando source , que também pode ser escrito como . file . Então, se você digitar

. dow

Seu shell atual mudará de diretório.

Ou, em vez disso, você pode definir um alias:

zanna@toaster:~$ alias dow='cd $HOME/Downloads'
zanna@toaster:~$ dow
zanna@toaster:~/Downloads$ 

Para torná-lo permanente, adicione a linha

alias dow='cd $HOME/Downloads'

ao seu arquivo ~/.bashrc . Ele estará disponível toda vez que você executar um shell interativo.

    
por Zanna 23.03.2018 / 21:22
3

Esta é uma duplicata entre sites: link .

A questão é que o script é executado em um subshell. O script muda de diretório e, em seguida, fecha, sem fazer alterações no seu shell atual.

Duas mitigações:

  1. execute . dow para fazer o script ser executado no contexto do shell atual.
  2. use um alias, por exemplo, no seu arquivo ~ / .bashrc que faz a alteração no diretório - por exemplo, alias dow="cd /home/myname/Downloads/" .

Se você está mudando de diretório, geralmente é uma boa ideia testar se funcionou antes de fazer outras coisas.

Existem algumas outras opções na questão relacionada.

    
por pbhj 23.03.2018 / 21:34