exec bash마지막으로 사용한

exec bash마지막으로 사용한

현재 작업 디렉터리를 간단히 변경하는 스크립트를 실행하고 싶습니다.

#!/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

관련 정보