스크립트를 사용하여 현재 작업 디렉터리 변경

스크립트를 사용하여 현재 작업 디렉터리 변경

나는 읽었다이것질문과 답변이 비슷하지만 내 문제에 정확히 맞지 않습니다.

저는 현재 프로젝트 중 하나를 시작하는 스크립트(cpj라고 함)를 작성 중입니다. 나는 그 중 약 5 개를 가지고 있습니다. 내가 입력하는 동안

$ cpj blah

현재 작업 디렉토리를 blah 프로젝트 디렉토리($PROJDIR에 저장)로 변경하고 emacsclient가 프로젝트의 기본 파일($MAINFILE에 저장)을 열도록 하고 싶습니다.

내가 인용한 질문은 스크립트가 실행되는 셸의 환경을 직접 변경할 수는 없지만 스크립트를 얻을 수 있고 그렇게 할 것이라고 말합니다.

이를 테스트하기 위해 다음 줄을 사용하여 쉘 스크립트(chcwd라고 함)를 작성했습니다.

cd $1

명령줄에서 다음을 수행하면:

$ . chcwd $PROJDIR

내 현재 작업 디렉토리는 내 희망에 따라 변경됩니다. 반면에 cpj 스크립트에서 동일한 줄을 얻는 경우:

. chcwd $PROJECT

쉘의 현재 작업 디렉토리는 변경되지 않습니다. 2개의 스크립트(cpj, 그 다음 chcwd)를 실행하여 2개의 쉘을 생성하고 있지만 원하는 것을 달성할 수 있는 방법이 없다는 것을 알고 있습니다. 누구든지 내 목표를 달성하는 방법을 말해 줄 수 있나요?

답변1

케이크를 갖고 있으면서도 먹을 수는 없습니다. 여기서 일어나는 두 가지 일은 새 셸에서 스크립트를 실행하는 것과 현재 셸에서 실행할 스크립트 줄을 가져오는 것입니다. 점 연산자(명령의 별칭 source)를 사용하면 실제로 코드가 실행됩니다.현재 쉘에서. 코드를 선택하면 cd완료 시 새 디렉터리에 남게 됩니다.

반면에 프로그램(또는 스크립트는 중요하지 않음)을 실행하려는 경우 프로그램은 하위 프로세스로 시작됩니다. 쉘 스크립트의 경우 새 쉘이 열리고 그 안에서 코드가 실행됩니다. 취해진 모든 조치는 cd실행 중인 모든 명령에 유효한 쉘의 현재 작업 디렉토리를 변경합니다. 작업이 완료되면 셸이 종료되고 수정되지 않은 원래 셸로 돌아갑니다.

자주 사용하고 현재 셸에서 그 효과를 유지하려면 "스크립트"를 셸 함수로 작성하고 ~/.profile 또는 다른 셸 rc 파일에 저장할 수 있습니다.

function cpj() {
    # code here
    cd /path/$1
    emacs file_name
}

답변2

개인적인 용도로 비슷한 스크립트가 있습니다. 스크립트 내에서 작업 디렉터리를 변경하는 매우 간단한 방법이 있습니다. 먼저 스크립트를 작성하세요. 예를 들면 다음과 같습니다.

#!/bin/bash

case $1 in
     project1) cd /home/me/work/customer1/project1
     ;;
     project2) cd /home/me/work/customer2/project1
     ;;
     project3) cd /home/me/work/customer3/project2
     ;;
     project4) cd /home/me/work/customer4/project5
     ;;
     *) echo "Usage: cdto cd_profile_name"
     ;;
esac

이제 스크립트 이름이 "cdto"라고 가정합니다. 이것이 작동하려면 현재 셸에서 이를 얻어야 하며, 이는 "source" 또는 "."을 사용하여 얻을 수 있습니다. 명령(둘 다 동일). 예를 들어:

. cdto project1

이제 더 편리하게:

  1. "cdto" 스크립트를 계정의 "bin" 디렉토리(예: /home/johnsmith/bin - 존재하지 않는 경우 생성)에 복사합니다. PATH 변수를 확인하여 "bin" 디렉터리가 포함되어 있는지 확인하세요.

    $PATH 에코

그렇지 않은 경우 .profile 파일을 편집하고 다음을 추가하십시오.

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
  1. .bashrc 또는 .bash_aliases 파일에 별칭을 추가합니다.

    별칭 cdto='.cdto'

모든 것이 완료되었습니다. 다음에 로그인한 후 또는 새 터미널을 열 때 in.ex를 사용할 수 있습니다.

cdto project1

즐기다:-)

세바스티안 피에치

답변3

간단한 방법으로 이를 수행할 수 있습니다.

pushd $PROJDIR && bash

이제 작업 디렉터리는 $PROJECT입니다.

관련 정보