chdir()는 쉘을 종료한 후 디렉토리를 변경하지 않습니다.

chdir()는 쉘을 종료한 후 디렉토리를 변경하지 않습니다.

C내 프로젝트 디렉토리를 변경하는 간단한 프로그램을 만들고 싶습니다 . 그 내용은 다음과 같습니다.

#include <unistd.h>
int main()
{
    chdir("/home/enedil/projects/algo");
    return 0;
}

다음 명령으로 컴파일했습니다( pro.c파일 이름은 입니다).

gcc pro.c -o /usr/local/bin/pro

오류나 경고가 없습니다. 하지만 실행해 보면 그렇습니다.아니요디렉터리를 변경합니다. 왜?

답변1

귀하의 프로그램은 귀하가 지시한 대로 정확히 수행합니다. 즉, 작업 디렉터리를 변경합니다.그 자체도착하다 /home/enedil/projects/algo. 하지만 일단 나가면,껍데기작업 디렉터리가 복원되었습니다.

내 생각에 당신이 달성하고 싶은 것은 단순한 cd.방법, 그러나 저자가 말했듯이 하지 마십시오.

답변2

현재 작업 디렉터리는 프로세스의 로컬 디렉터리입니다. 그러므로 당신이 원하는 것은 불가능합니다.

답변3

쉘에 이 작업을 수행하려면 다음을 사용하십시오.source명령(별칭 .). 새로운 쉘 컨텍스트를 생성하는 대신 현재 쉘의 컨텍스트에서 애플리케이션을 실행합니다. 환경변수를 설정하는 방법이기도 합니다. /etc/rc.d모든 시작 스크립트를 확인 하거나 /etc/init.d다른 스크립트에 의해 해당 명령에 많은 스크립트가 포함되어 있음을 알 수 있습니다.

. /etc/init.d/rcvars

이로 인해 .스크립트 /etc/init.d/rcvars에 대한 모든 변경 사항이 현재 환경에 유지됩니다.

답변4

CDPATH환경 변수를 사용할 수도 있습니다 . 설명된 대로 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".

예를 들어 다음 줄을 다음 줄에 추가할 수 있습니다 ~/.profile.

CDPATH=~/projects

이제 cd projects모든 디렉터리에서 실행하고 ~/projects.

관련 정보