2013-08-15 2 views
4

linux의 쉘 스크립트에서 디렉토리를 변경하려고합니다.쉘 스크립트에서 디렉토리를 바꿀 수 없습니다.

#!/bin/sh 
cd /driver 

위의 내용은 디렉토리를 변경하지 않습니다. 이

(드라이버로) 변경 드라이브와 함께 리눅스 터미널을 제공 할 수 있도록 쉘하지만 CD/드라이버에게 LS 을 줄 경우이 드라이버 디렉토리에 ls의 적절한 출력을 제공 다시 나오는 자신의 컨텍스트에서 실행됩니다 driver directory

누구나 실제로 경로가 변경된 터미널을 얻을 수 있도록 도와 줄 수 있습니까? (into driver).

+1

[bash 쉘 스크립트에서 "cd"가 작동하지 않는 이유는 무엇입니까?] (http://stackoverflow.com/questions/255414/why-doesnt-cd-work-in-a-bash-shell - 스크립트) – tripleee

답변

3

변경됩니다. 해당 하위 쉘에서 디렉토리를 변경해도 스크립트를 호출하는 쉘의 작업 디렉토리에는 영향을 미치지 않습니다. 대신 당신이

source ./scriptname

를 입력하면 원하는 결과를 얻을 수 있습니다.

+0

당신은 나를 구원해주었습니다. – Mohammad

1

"원본 script_name"입니다. 당신은 당신이 스크립트의 명령이 실행되는 서브 쉘을 열고있다

./scriptname

으로 스크립트를 실행하는 경우이 디렉토리를

1

디렉토리를 설정 한 후 스크립트에서 쉘 또는 터미널을 시작할 수 있습니다.

수 있도록 :

파일 : 드라이버, X 권한

#!/bin/bash 
cd /driver 
bash 

또 다른 쉘 프롬프트를 생성합니다 실행 드라이버를 설정해야합니다.

현재 현재 디렉토리가 드라이버입니다.

"exit"또는 control-D를 입력하면 이전 디렉토리로 이전 쉘로 돌아갑니다.

#!/bin/sh 
cd /driver 

당신이

이 같은 스크립트를 작성 다음과 같은 작업을 수행 할 수 원인 #!/bin/sh

cd /driver 
1

스크립트가 실행 파일입니다

read a 
echo "You entered : $a" 

저장하고 (예 : script.sh) 필요한 경우 사용 권한을 변경하십시오.

동일한 탭에서 'ps'명령을 실행하고 쉘 pid (p1)를 기록하십시오.

이제 스크립트 (예 : ./script)를 실행하십시오.sh)

스크립트는 입력을 요구하지만 입력을 제공하지 않습니다. 이제 다른 탭에서 'ps -ef | grep pts '. 여기서 두 개의 쉘 프로세스가 있음을 알 수 있습니다. ppid가 이전 쉘의 pid, 즉 p1과 동일한 셸이 하나 더 있습니다.

그래서 기본적으로 각 셸 스크립트 호출은 새 프로세스와 따라서 새 컨텍스트를 만듭니다.

희망이 도움이되었습니다.

0

그냥 위의 문제의 뿌리를 확인하기 위해 제거 - :

관련 문제