É possível alterar o diretório atual de um script?
Quero criar um utilitário para navegação de diretório no Bash. Eu criei um script de teste que se parece com o seguinte:
#!/bin/bash
cd /home/artemb
Quando executo o script no shell Bash, o diretório atual não muda. É possível alterar o diretório shell atual de um script?
bash
environment
artemb
fonte
fonte
pushd
(possivelmente redirecionado para>/dev/null
suprimir sua saída) em vez decd
, poderá retornar posteriormente ao diretório anterior compopd
.Respostas:
Você precisa converter seu script em uma função shell:
O motivo é que cada processo tem seu próprio diretório atual e, quando você executa um programa a partir do shell, ele é executado em um novo processo. O "cd", "pushd" e "popd" padrão são incorporados ao interpretador de shell para que afetem o processo do shell.
Ao tornar seu programa uma função de shell, você está adicionando seu próprio comando em processo e qualquer alteração de diretório é refletida no processo de shell.
fonte
Quando você inicia seu script, é criado um novo processo que herda apenas seu ambiente. Quando termina, termina. Seu ambiente atual permanece como está.
Em vez disso, você pode iniciar seu script assim:
Ele
.
avaliará o script no ambiente atual, para que possa ser alteradofonte
.sh
extensões são totalmente eww. Não os use.À luz da ilegibilidade e da complicação excessiva das respostas, acredito que é isso que o solicitante deve fazer
PATH
. scriptname
O
.
(ponto) garantirá que o script não seja executado em um shell filho.fonte
Juntando o exposto, você pode criar um alias
se você não quiser escrever o "" inicial. toda vez que você desejar originar seu script no ambiente shell, ou se você simplesmente não quiser se lembrar, isso deve ser feito para que o script funcione corretamente.
fonte
~/.bash_aliases
nem sempre é fornecido quando o Bash é iniciado.Se você estiver usando o bash, tente o alias:
no arquivo .bashrc, adicione esta linha:
quando você escreve "p" na linha de comando, ele altera o diretório.
fonte
Se você executar um script bash, ele funcionará no ambiente atual ou nos de seus filhos, nunca no pai.
Se o objetivo é executar seu comando: goto.sh / home / test Então, trabalhe interativamente em / home / test. Uma maneira é executar um subshell interativo bash dentro do seu script:
Dessa forma, você estará em / home / test até sair (exit ou Ctrl + C) desse shell.
fonte
Com pushd, o diretório atual é empurrado na pilha de diretórios e é alterado para o diretório especificado, popd coloca o diretório no topo da pilha e muda para ele.
fonte
Simplesmente vá para
e adicione este código ao lado da última linha:
Então saia do editor.
Então digite:
agora você pode usar: seu comando no terminal
fonte
Eu criei um script para alterar o diretório. dê uma olhada: https://github.com/ygpark/dj
fonte
Basicamente usamos
cd..
para voltar de todos os diretórios. Eu pensei em facilitar, fornecendo o número de diretórios com os quais você precisa voltar de cada vez. Você pode implementar isso usando um arquivo de script separado usando o comando alias. Por exemplo:code.sh
Depois de usar
source code.sh
o shell atual, você pode usar:para voltar duas etapas do diretório atual. Explicado em detalhes por aqui . Também é explicado por lá como colocar o código em ~ / .bashrc, para que cada novo shell aberto tenha automaticamente esse novo comando de alias. Você pode adicionar um novo comando para acessar diretórios específicos, modificando o código adicionando mais
if conditions
e diferentes argumentos. Você também pode extrair o código do git aqui .fonte
Essa abordagem é mais fácil para mim.
Suponha que em um iMac pessoal em que você seja um administrador, no diretório padrão quando uma janela de comando for aberta, / Users / jdoe, esse seja o diretório para: /Users/jdoe/Desktop/Mongo/db.3.2.1 / bin.
Estas são as etapas que podem fazer o trabalho:
cd /Users/jdoe/Desktop/Mongo/db.3.2.1/bin
como a primeira linha.chmod 755 mongobin
source mongobin
pwd
Voila!
fonte
Eu também criei um utilitário chamado bode que você pode usar para facilitar a navegação.
Você pode ver o código fonte no GitHub .
A partir da v2.3.1, a visão geral do uso é semelhante a esta:
fonte
Eu gosto de fazer a mesma coisa em projetos diferentes sem disparar um novo shell.
No seu caso:
Salve the_script como:
Em seguida, acenda-o com:
Então você chega ao diretório usando o mesmo shell.
fonte
Adicione abaixo da linha do CD no seu shellscript:
fonte
Declare seu caminho:
fonte
Basta escrever
PWD
e exportá-lo para o seu script, e a alteração persistirá.fonte