![exec bash마지막으로 사용한](https://linux55.com/image/19772/exec%20bash%EB%A7%88%EC%A7%80%EB%A7%89%EC%9C%BC%EB%A1%9C%20%EC%82%AC%EC%9A%A9%ED%95%9C.png)
현재 작업 디렉터리를 간단히 변경하는 스크립트를 실행하고 싶습니다.
#!/bin/bash
cd web/www/project
그러나 실행 후 현재 비밀번호는 변경되지 않습니다! 어떻게 해야 하나요?
답변1
이는 예상된 동작입니다. 스크립트는 하위 쉘에서 실행되며 상위 쉘 작업 디렉토리를 변경할 수 없습니다. 종료되면 효과가 사라집니다.
현재 셸의 디렉터리를 영구적으로 변경하려면 하위 셸이 아닌 현재 셸 환경에서 스크립트를 실행하는 source
간단히 별칭이 지정된 이 명령을 사용해야 합니다..
다음 명령은 동일합니다.
. script
또는
source script
답변2
이와 같은 작은 작업의 경우 스크립트를 만드는 대신 다음과 같은 별칭을 만듭니다.
$ alias cdproj='cd /dir/web/www/proj'
.bashrc
각 대화형 셸에 대해 이를 설정하려면 파일에 추가해야 합니다.
이제 다음과 같이 실행할 수 있습니다 $ cdproj
.
답변3
exec bash
마지막으로 사용한
Bash 스크립트는 현재 환경이나 하위 환경에서 실행되지만 상위 환경에서는 실행되지 않습니다.
하지만 이 질문은 사람들이 원하기 때문에 자주 묻는 질문입니다.실행 후 특정 디렉터리의 bash 프롬프트를 유지합니다.다른 디렉토리의 bash 스크립트.
이 경우 스크립트 끝에서 하위 bash 인스턴스를 실행하면 됩니다.
#!/usr/bin/env bash
cd desired/directory
exec bash
그러면 새로운 하위 쉘이 생성됩니다. Ctrl+를 입력 D하거나 exit
원래 스크립트를 시작한 첫 번째 셸로 돌아갑니다.
업데이트: $SHELL
마지막으로 사용됨
적어도 최신 버전에서는 bash
마지막 exec
줄이 더 이상 필요하지 않습니다. 또한 환경 변수를 사용하여 선호하는 쉘에서 작동하도록 스크립트를 만들 수 있습니다 $SHELL
. 그러면 다음이 제공됩니다.
#!/usr/bin/env bash
cd desired/directory
$SHELL
답변4
원하는 것을 정확히 수행하는 몇 가지 답변이 있지만 이 목적을 위한 보다 표준적인 방법은 기호 링크를 만드는 것입니다.
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