현재 작업 디렉토리를 간단하게 변경하기 위해 스크립트를 실행하고 싶습니다.
#!/bin/bash
cd web/www/project
그러나 그것을 실행 한 후에도 현재 암호는 변경되지 않습니다! 어떻게해야합니까?
답변
예상되는 동작이며 이미 여러 번 논의되었습니다.
스크립트는 서브 쉘에서 실행되며 상위 쉘 작업 디렉토리를 변경할 수 없습니다. 완료되면 그 효과가 사라집니다.
디렉토리를 영구적으로 변경하려면 다음 과 같이 스크립트를 소싱 해야 합니다 .
. ./script
답변
이와 같은 작은 작업의 경우 스크립트를 만드는 대신 다음과 같은 별칭을 만드십시오.
$ alias cdproj='cd /dir/web/www/proj'
.bashrc
모든 대화식 쉘에 대해 설정하려면 파일에 추가해야합니다 .
이제 이것을 다음과 같이 실행할 수 있습니다 $ cdproj
.
답변
사용 exec bash
마지막에
bash 스크립트는 현재 환경 또는 하위 환경에서 작동하지만 상위 환경에서는 작동하지 않습니다.
그러나 다른 디렉토리에서 bash 스크립트를 실행 한 후 특정 디렉토리의 bash 프롬프트에 남아 있기를 원하기 때문에이 질문이 종종 제기됩니다 .
이 경우 스크립트 끝에서 자식 bash 인스턴스를 실행하십시오.
#!/usr/bin/env bash
cd desired/directory
exec bash
새로운 서브 쉘이 생성됩니다. exit
스크립트가 처음 시작된 첫 번째 쉘로 돌아가려면 입력하십시오 .
답변
원하는 정확한 작업을 수행하는 답변이 있지만 이러한 목적을위한보다 표준적인 방법은 심볼릭 링크를 만드는 것입니다.
ln -s ~/web/www/project proj #use full path to dir!
그런 다음 cd
이름을 사용하여 디렉토리로 이동할 수 있습니다 proj
.
cd proj
이 방법은 다음과 같이 짧은 이름을 사용하여 파일에 액세스 할 수 있기 때문에보다 유연합니다 cd
.
ls proj/ #note the endslash!
vim proj/file.x
답변
답변
수행하려는 작업에 따라 다른 솔루션이 스크립트 대신 함수를 생성 할 수 있습니다.
예:
파일에 함수를 작성하십시오 /home/aidin/my-cd-script
.
function my-cd() {
cd /to/my/path
}
그런 다음 파일 bashrc
또는 zshrc
파일 에 포함 하십시오.
# Somewhere in rc file
source /home/aidin/my-cd-script
이제 명령처럼 사용할 수 있습니다.
$ my-cd
답변
왜 “exec”를 사용하지 않습니까?
#!/bin/bash
cd someplace
exec bash
~/someplace