Script para alterar o diretório atual (cd, pwd)

29

Eu quero executar um script para simplesmente alterar o diretório de trabalho atual:

#!/bin/bash
cd web/www/project

Mas, depois de executá-lo, o pwd atual permanece inalterado! Como posso fazer isso?

    
por Sony Santos 19.12.2011 / 08:55

6 respostas

41

É um comportamento esperado e já foi discutido várias vezes.

O script é executado em um subshell e não pode alterar o diretório de trabalho do shell pai. Seus efeitos são perdidos quando termina.

Para alterar o diretório permanentemente, você deve fornecer o script, como em

. ./script
    
por 19.12.2011 / 09:13
17

Para pequenas tarefas como esta, em vez de criar um script, crie um alias como este,

$ alias cdproj='cd /dir/web/www/proj'

Você deve adicionar isso ao seu arquivo .bashrc , se quiser que ele seja definido para cada shell interativo.

Agora você pode executar isso como $ cdproj .

    
por 19.12.2011 / 15:12
7

Embora existam respostas que façam a ação exata desejada, um método mais padrão para esse fim é criar um link simbólico:

ln -s ~/web/www/project proj   #use full path to dir!

Então você poderia cd para o diretório usando o nome proj :

cd proj

Este método é mais flexível porque você pode acessar arquivos usando o nome abreviado sem cd :

ls proj/   #note the endslash!
vim proj/file.x
    
por 22.12.2011 / 15:25
7

Use exec bash no final

A bash script operates on its current environment or on that of its children, but never on its parent environment.

No entanto, essa pergunta é frequentemente feita porque alguém quer ser deixado no prompt do bash em um determinado diretório após a execução de um script bash de outro diretório.

Se este for o caso, basta executar uma instância do filho no final do script:

#!/bin/bash
cd desired/directory
exec bash
    
por 21.04.2016 / 13:36
3

Se você mudar entre diretórios distantes no sistema de arquivos. Vou recomendar o autojump .

    
por 23.12.2011 / 03:30
2

Depende do que você vai fazer, outra solução pode criar uma função em vez de um script.

Exemplo:

Crie uma função em um arquivo, digamos /home/aidin/my-cd-script :

function my-cd() {
  cd /to/my/path
}

Depois, inclua-o no arquivo bashrc ou zshrc :

# Somewhere in rc file
source /home/aidin/my-cd-script

Agora você pode usá-lo como um comando:

$ my-cd
    
por 20.06.2018 / 02:59