chdir (diretório) não altera o diretório após sair para o shell

8

Eu queria fazer um programa C 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 muda de diretório. Por quê?

    
por enedil 08.07.2014 / 12:45

4 respostas

15

Seu programa faz exatamente o que você diz: ele altera o diretório de trabalho propriamente dito para /home/enedil/projects/algo . Mas assim que sair, o diretório de trabalho do shell será 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 seu autor diz: não faça isso.

    
por 08.07.2014 / 13:06
5

O diretório de trabalho atual é local para o processo. Então, o que você quer não é possível.

    
por 08.07.2014 / 13:05
1

Você também pode usar a variável ambiental CDPATH . Conforme explicado em 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 exemplo, você pode adicionar essa linha ao seu ~/.profile :

CDPATH=~/projects

Agora você pode executar cd projects de qualquer diretório e ir para ~/projects .

    
por 08.07.2014 / 14:21
0

Para fazer isso no shell, use o comando source (alias codificar%). Ele executará o aplicativo no contexto do shell atual em vez de criar um novo contexto de shell. É assim que você pode definir variáveis de ambiente também. Se você observar todos os scripts de inicialização em . ou /etc/rc.d , verá muitos scripts incluídos por outros scripts com o comando

. /etc/init.d/rcvars

O /etc/init.d faz com que o script . faça com que qualquer coisa que ele mude persista no ambiente atual.

    
por 08.07.2014 / 19:33