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 atual pwd permanece inalterado! Como eu posso fazer isso?
bash
scripting
environment-variables
cd-command
Sony Santos
fonte
fonte
return
para escapar de um script originado dessa maneira, nãoexit
- eles são como funções do shell eexit
sairão do shell que originou o script.source ./script
o mesmo?.
esource
são iguais no bash. 2. não precisamos usar o./
nome do arquivo antes, se estiver no mesmo diretório. Não há problema em executar apenas isso:. script
Para pequenas tarefas como essa, em vez de criar script, crie um alias como este,
Você deve adicionar isso ao seu
.bashrc
arquivo, se desejar, para cada shell interativo.Agora você pode executar isso como
$ cdproj
.fonte
eval `./script`
oueval $(./script)
para executar esses comandos. Essa é uma abordagem comum para comandos que precisam atualizar o ambiente do shell de chamada.eval
abordagem.Use
exec bash
no finalNo entanto, essa pergunta geralmente é feita porque alguém deseja 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 for esse o caso, simplesmente execute uma instância do bash filho no final do script:
Isso cria um novo subshell. Digite
exit
para retornar ao primeiro shell em que o script foi iniciado inicialmente.fonte
exec
é normalmente considerado o último recurso de um canalha .. :) #exit
(ou Ctrl + D), precisará fazer isso 11 a 21 vezes. (2) Outra desvantagem do uso de um script executável é que, se você definir quaisquer opções de shell (por exemplo,dotglob
ouglobstar
) em sua sessão interativa de shell, você as perderá, porque está iniciando um novo shell.Embora existam respostas que executam a ação exata que você deseja, um método mais padrão para esse fim é criar um link simbólico:
Em seguida, você pode
cd
acessar o diretório usando o nomeproj
:Este método é mais flexível porque você pode acessar arquivos usando o nome abreviado sem
cd
:fonte
Se você mudar entre diretórios distantes no sistema de arquivos. Vou recomendar o salto automático .
fonte
Depende do que você fará, outra solução pode ser criar uma função em vez de um script.
Exemplo:
Crie uma função em um arquivo, digamos
/home/aidin/my-cd-script
:Em seguida, inclua-o no seu arquivo
bashrc
ouzshrc
:Agora você pode usá-lo como um comando:
fonte
Por que não usar "exec" é costurado para fazer exatamente o que eu desejo.
fonte
exit
(ou Ctrl + D), será necessário fazer isso 11 a 21 vezes.dotglob
ouglobstar
), você as perderá, porque está iniciando um novo shell. … (Continua)Você pode fazer isso usando uma função ou usando && Os exemplos abaixo instalam o Zabbix e criam um arquivo com uma linha dentro dele.
Ex:
ou:
fonte