chdir (< directory >)는 ' 셸을 종료 한 후

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

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

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

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

오류나 경고가 없었습니다. 하지만 실행하면 디렉토리가 변경되지 않습니다 . 그 이유는 무엇입니까?

댓글

  • 대신 별칭을 사용할 수 있습니다.-alias proj='cd ~/enedil/projects/algo'
  • @MichaelDurrant 오, cd ~/projects/algo 말씀이신가요? 아이디어입니다!
  • 이것은 의도적으로 설계된 것입니다!

답변

프로그램 명령 한대로 정확하게 수행합니다. 자체 의 작업 디렉토리를 /home/enedil/projects/algo. 그러나 일단 종료되면 shell “의 작업 디렉토리가 복원됩니다.

원하는 것 같아요. 달성하는 것은 간단한 cd에 의존하지 않고 상위 프로세스, 즉 셸의 작업 디렉토리를 변경하는 것입니다. a 메소드 , 작성자가 말했듯이 :하지 마십시오.

댓글

  • Nitpick,하지만 쉘 '의 작업 디렉토리는 변경되지 않았으므로 ' 복원되지 않았습니다. 쉘은 프로그램과 마찬가지로 단순한 프로세스입니다. 각 프로그램에는 ' 자체 작업 디렉토리가 있습니다.
  • @Patrick, true. 개념적으로 더 정확한 것은 프로세스가 " 복원 된 "라는 점에서 사용자의 작업 디렉토리가 복원되는 것입니다. 활성).

Answer

현재 작업 디렉토리는 프로세스에 로컬입니다. 따라서 원하는 것은 불가능합니다.

답변

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.

Answer

셸에 대해이 작업을 수행하려면 source 명령 (.로 별칭 지정). 새 셸 컨텍스트를 만드는 대신 현재 셸의 컨텍스트에서 응용 프로그램을 실행합니다. 이것은 환경 변수도 설정할 수있는 방법입니다. /etc/rc.d 또는 /etc/init.d에서 모든 시작 스크립트를 발견하면 명령과 함께 다른 스크립트에 포함 된 많은 스크립트를 볼 수 있습니다.

. /etc/init.d/rcvars 

./etc/init.d/rcvars 스크립트를 생성하여 변경 사항은 현재 환경에서 유지됩니다.

댓글

  • C 프로그램을 실행할 수 없습니다 ' 이렇게하면 쉘 스크립트 만 가능합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다