2013-02-14 7 views
2

예를 들어, 내가의 tmp라는 디렉토리가 나는 홈 디렉토리스크립트를 사용하여 디렉토리로 cd 할 수 있습니까?

$pwd 
/my/home/directory/ 
$ls 
tmpdir 

에이고 나는 tmp.sh이 그 "TMP"디렉토리에 CD를

#!/bin/bash 
cd tmp 

및 가정 해 봅시다 이 스크립트를 실행 한 후

$sh tmp.sh 

을 사용하여 스크립트를 실행했지만 아직 내 홈 디렉토리에 있습니다.

1) 나는이 철저하게 작동하지 않는 이유를 이해하려는) (난 그냥 대충이도 권리? (부모 프로세스의 독립적 인 어린이 과정과 관련이있다) 알고 및

2)이 작업을 수행하는 방법에 대해 어떻게 할 수 있습니까 (스크립트 실행 완료시 스크립트 CD-ROM에 들어있는 디렉토리에서 끝납니다)?

답변

4

쉘의 작업 디렉토리입니다. 스크립트를 실행하면 스크립트에 대한 새 셸이 만들어집니다. 상위 쉘이 아닌 나머지 코드에 대해 현재 작업중인 디렉토리를 변경하고 있습니다.

2) 어떻게하면이 작업을 완료 할 수 있습니까 (스크립트 실행 완료시 스크립트 CD-Edited 디렉토리에있게됩니까?)?

이 작업을 수행하려면 && 스크립트를 사용할 수 있습니다. 더 나은 이해를위한 Why cd is not a program? - 그래서 스크립트가 성공적으로 실행하는 경우는 만 당신은 당신은 또한 unix.se 게시물을 통해 이동해야

./tmp.sh && cd <to_your_directory> 

로 새 디렉토리에 끝낸다.

2

1) 쉘 스크립트를 실행하면 쉘의 새 인스턴스에서 실행됩니다. 이 셸이 종료되면 낡은 셸 버전에 그대로 남아 있습니다. 외부에서 셸 스크립트는 코드의 일부입니다.

2) 정말 좋은 해결책은 없습니다. 나는 할 것이다

sh tmp.sh && cd /tmp 
1

짧은 대답은 스크립트가 별도의 프로세스에서 실행되고 한 프로세스에서 현재 디렉토리를 변경해도 다른 프로세스에 영향을 미치지 않는다는 것입니다. 예를 들어, 동일하다. 변수를 설정하십시오 (이 경우 발생할 수있는 몇 가지 매혹적인 버그는 here을 참조하십시오).

작동 시키려면 프롬프트에 입력 한 것처럼 스크립트를 실행하려면 source tmp.sh과 함께 스크립트를 제공 할 수 있습니다. 더 편리하게하기 위해, 당신은에 기능을 추가 할 수 있습니다 ~/.bashrc에 :

foo() { 
    cd somewhere 
} 

또는 foo을 실행할 때 모두 다음 어딘가에 CD에 당신을 수

alias foo="cd somewhere" 

와 별칭 (에서 다음 로그인).

0

1) 현재 작업 디렉토리 인 cwd는 프로세스 상태의 일부입니다.쉘 스크립트가 시작될 때 쉘 스크립트는 새로운 프로세스이므로 자체 cwd를 갖습니다. 스크립트 셸의 명령은 해당 프로세스의 cwd에만 영향을 미칩니다.

2) 스크립트가 출력을 생성하지 않으면 스크립트에서 원하는 디렉토리를 출력하고 스크립트를 호출하고 출력 위치를 변경하는 쉘 함수/별칭을 가질 수 있습니다. 예 :

cd `script` 
관련 문제