현재 디렉토리를 내 프로젝트 디렉토리로 변경하는 작은 스크립트를 작성하려고합니다.
#!/bin/bash
cd /home/tree/projects/java
이 파일을 proj로 저장하고에 실행 권한을 추가 chmod
하고에 복사했습니다 /usr/bin
. 내가 전화하면 :
proj
아무것도하지 않습니다. 내가 무엇을 잘못하고 있지?
답변
쉘 스크립트는 서브 쉘 내에서 실행되며 각 서브 쉘에는 현재 디렉토리에 대한 자체 개념이 있습니다. 은 cd
성공하지만 곧 서브 쉘 종료, 당신은있는 대화 형 쉘 다시 아무것도 이제까지이 변경되었습니다.
이 문제를 해결하는 한 가지 방법은 별명을 대신 사용하는 것입니다.
alias proj="cd /home/tree/projects/java"
답변
당신은 아무것도 잘못하고 있지 않습니다! 디렉토리를 변경했지만 스크립트를 실행하는 서브 쉘 내에서만 가능합니다.
“dot”명령을 사용하여 현재 프로세스에서 스크립트를 실행할 수 있습니다.
. proj
그러나 나는이 간단한 경우에 별칭을 사용하는 Greg의 제안을 선호합니다.
답변
cd
스크립트에서 기술적으로 작동 이 스크립트를 실행 한 쉘의 디렉토리를 변경으로,하지만 대화 형 쉘에서 포크 별도의 프로세스이었다.
이 문제를 해결하기위한 Posix 호환 방법 은 쉘 호출 명령 스크립트 대신 쉘 프로 시저 를 정의하는 것 입니다.
jhome () {
cd /home/tree/projects/java
}
이것을 입력하거나 다양한 쉘 시작 파일 중 하나에 넣을 수 있습니다.
답변
은 cd
스크립트의 쉘 내에서 수행된다. 스크립트가 끝나면 해당 셸이 종료되고 현재 디렉토리에 남아있게됩니다. 스크립트를 “소스”로 실행하지 마십시오. 대신에:
./myscript.sh
하다
. ./myscript.sh
(스크립트 이름 앞에 점과 공백이 있습니다.)
답변
선택 디렉토리로 cd 할 bash 스크립트를 작성하려면 다음을 수행하십시오.
스크립트 파일 작성
#! / bin / sh # 파일 : / scripts / cdjava # CD / home / askgelal / projects / java
그런 다음 시작 파일에 별명을 작성하십시오.
#! / bin / sh # 파일 /scripts/mastercode.sh # 별명 cdjava = '. / scripts / cdjava '
- 모든 별명과 사용자 정의 함수를 덤프하는 시작 파일을 작성했습니다.
- 그런 다음이 파일을 .bashrc에 소스하여 각 부팅마다 설정하십시오.
예를 들어, 마스터 별명 / 함수 파일을 작성하십시오. /scripts/mastercode.sh
(이 파일에 별명을 입력하십시오.)
그런 다음 .bashrc 파일 의 끝에서 :
소스 /scripts/mastercode.sh
이제 java 디렉토리로 쉽게 CD를 입력 할 수 있습니다. cdjava 만 입력하면됩니다.
답변
.
현재 쉘 환경에서 스크립트를 실행하는 데 사용할 수 있습니다 .
. script_name
또는 더 읽기 쉽지만 쉘 특정 별명 source
:
source script_name
이것은 서브 쉘을 피하고 변수 나 내장 (포함 cd
)이 현재 쉘에 영향을 줄 수 있도록합니다 .
답변
제레미 루텐 (Jeremy Ruten)의 심볼릭 링크 사용에 대한 아이디어는 다른 답변을 넘어 가지 않은 생각을 촉발 시켰습니다. 사용하다:
CDPATH=:$HOME/projects
선행 콜론이 중요합니다. 즉, 현재 디렉토리에 ‘dir’디렉토리가 있으면 ‘ cd dir
‘는 다른 곳을 호핑하지 않고 해당 디렉토리로 변경합니다. 표시된대로 값을 설정하면 다음을 수행 할 수 있습니다.
cd java
그리고 현재 디렉토리에 java라는 하위 디렉토리가 없으면 $ HOME / projects / java로 직접 이동합니다. 별명, 스크립트, 모호한 실행 또는 점 명령이 없습니다.
내 $ HOME은 / Users / jleffler입니다. 내 $ CDPATH는 다음과 같습니다
:/Users/jleffler:/Users/jleffler/mail:/Users/jleffler/src:/Users/jleffler/src/perl:/Users/jleffler/src/sqltools:/Users/jleffler/lib:/Users/jleffler/doc:/Users/jleffler/work