Alterando o diretório atual com um script bash? [duplicado]

2

Eu queria saber se é possível alterar o diretório de um shell de um script bash, mas manter a alteração do diretório persistente para mais do que apenas o subshell.

Estou ciente de que quando você executa cd dentro de um script bash, o diretório só será alterado dentro da subshell, e quando você voltar, você retornará ao diretório em que estava.

No entanto, quero fazer um comando para me levar a determinados diretórios. Eu poderia usar um alias, mas há muitos subdiretórios que eu teria que fazer um alias para ...

    
por kamziro 15.11.2018 / 05:14

2 respostas

1

Não, os scripts são executados em um shell separado, o que não afeta seus ancestrais. Mas você poderia usar uma função, que aceita argumentos e, portanto, é mais flexível que o alias. Outra opção é pesquisar arquivos com source ou seu equivalente . , mas isso não aceita argumentos. Ainda assim, afeta o shell atual. Você pode combinar os dois e colocar as funções em um arquivo que você usaria e usar as funções no processo atual.

    
por 15.11.2018 / 05:19
0

Você provavelmente está procurando algo como a variável CDPATH shell.

A variável CDPATH age como PATH , mas para o comando cd .

Definindo com algo como

CDPATH=".:~:~/projects:~/music"

permitiria que você dissesse

cd ricky_martin

em qualquer lugar, e percorreria os caminhos do diretório : -separated no valor $CDPATH em ordem até encontrar um subdiretório chamado ricky_martin em algum lugar (possivelmente ~/music/ricky_martin ) e, em seguida, cd there.

Da mesma forma

cd world_domination

pode levá-lo a ~/projects/world_domination se houver um subdiretório desse tipo. Se world_domination também existisse no diretório atual, esse diretório seria selecionado primeiro, como ocorre anteriormente em $CDPATH (o ponto na primeira posição).

Também seria permitido fazer

cd proj1/tests

de qualquer lugar para obter ~/projects/proj1/tests se tal diretório existisse (com o valor acima de $CDPATH , a menos que proj/tests não existisse no diretório atual ou em seu diretório pessoal).

Observe que a variável shell CDPATH não deve ser exportada, pois isso pode confundir seriamente alguns scripts.

A variável CDPATH está documentada no manual bash ( man bash ):

CDPATH

The search path for the cd command. This is a colon-separated list of directories in which the shell looks for destination directories specified by the cd command. A sample value is ".:~:/usr".

    
por 15.11.2018 / 08:41

Tags