Eu queria fazer um C
programa simples para mudar para o diretório do meu projeto. Seu conteúdo é o seguinte:
#include <unistd.h>
int main()
{
chdir("/home/enedil/projects/algo");
return 0;
}
Eu o compilei com o seguinte comando ( pro.c
é o nome do arquivo):
gcc pro.c -o /usr/local/bin/pro
Não houve erros nem avisos. Mas quando eu o executo, ele não altera o diretório. Por quê?
process
c
cd-command
enedil
fonte
fonte
alias proj='cd ~/enedil/projects/algo'
cd ~/projects/algo
? É uma ideia!Respostas:
Seu programa é exatamente o que você diga a ele para fazer: ela muda o diretório de trabalho para si a
/home/enedil/projects/algo
. Mas assim que sai, o diretório de trabalho do shell é restaurado.Eu acho que o que você deseja alcançar é alterar o diretório de trabalho do processo pai, ou seja, o shell, sem recorrer a um simples
cd
. Existe um método , mas como o autor diz: não faça.fonte
O diretório de trabalho atual é local para o processo. Então, o que você quer não é possível.
fonte
Você também pode usar a
CDPATH
variável ambiental. Como explicado emman bash
:Então, por exemplo, você pode adicionar esta linha ao seu
~/.profile
:Agora você pode executar
cd projects
de qualquer diretório e ir para~/projects
.fonte
Para fazer isso no shell, use o
source
comando (aliasado a.
). Ele executará o aplicativo no contexto do shell atual, em vez de criar um novo contexto de shell. É assim que você também pode definir variáveis de ambiente. Se você observar todos os scripts de inicialização em/etc/rc.d
ou/etc/init.d
, verá muitos scripts incluídos por outros scripts com o comandoO
.
faz com que o script de/etc/init.d/rcvars
modo que qualquer coisa que muda persiste no ambiente atual.fonte