태그 보관물: environment-variables

environment-variables

현재 디렉토리를 변경하는 스크립트 (cd, pwd) 실행하고 싶습니다. #!/bin/bash cd web/www/project 그러나

현재 작업 디렉토리를 간단하게 변경하기 위해 스크립트를 실행하고 싶습니다.

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


답변

파일 시스템에서 멀리 떨어진 디렉토리간에 변경하는 경우 autojump 을 추천 합니다 .


답변

수행하려는 작업에 따라 다른 솔루션이 스크립트 대신 함수를 생성 할 수 있습니다.

예:

파일에 함수를 작성하십시오 /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