%EB%8A%94%20%EC%89%98%EC%9D%84%20%EC%A2%85%EB%A3%8C%ED%95%9C%20%ED%9B%84%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EB%A5%BC%20%EB%B3%80%EA%B2%BD%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
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
.