스크립트에서 작업 디렉터리를 변경하고 실행하면 작업 디렉터리가 스크립트에 있는 동안 지정된 경로로만 변경됩니다.

스크립트에서 작업 디렉터리를 변경하고 실행하면 작업 디렉터리가 스크립트에 있는 동안 지정된 경로로만 변경됩니다.

스크립트에서 작업 디렉터리를 변경하고 실행하면 작업 디렉터리는 스크립트에 있는 동안 지정된 경로로만 변경됩니다. 내 스크립트는 다음과 같습니다. (실제로 디렉토리가 변경되었는지 확인하기 위한 것입니다)
#!/bin/bash
cd /media/hard/drive/partitionX/
pwd

실행하면 지정된 경로가 반환되지만 터미널의 작업 디렉터리는 변경되지 않습니다. 스크립트를 통해 터미널의 작업 디렉터리를 어떻게 변경합니까?

답변1

이것은 정상입니다. "현재" 또는 "작업" 디렉터리는 프로세스별 매개변수이며 프로세스는 변경만 가능합니다.그 자체의작업 디렉토리. 독립 실행형 스크립트는 별도의 셸 프로세스로 실행되며 상위 셸에 영향을 미칠 수 없습니다(사실 상위 셸이 항상 그렇지 않을 수도 있음).BE껍질).

다음과 같은 셸 내부 기능을 사용해야 합니다.

  • 쉘 기능:

    mycd() {
        cd /media/hard/drive/partitionX/;
        pwd;
    }
    
  • 쉘 별칭:

    alias mycd='cd /media/hard/drive/partitionX; pwd'
    
  • 스크립트를 실행하는 대신 스크립트를 "소스"로 사용합니다.

    . mycd.sh
    

주요 목표가 특정 디렉터리에 대한 바로 가기를 만드는 것이라면 다음을 사용할 수도 있습니다.

  • 보다 편리한 위치에 있는 심볼릭 링크:

    ln -s /media/hard/drive/partitionX ~/partX
    cd ~/partX
    
  • 변수($mydir):

    mydir=/media/hard/drive
    cd $mydir
    
  • $CDPATH 기능:

    CDPATH=".:/media/hard/drive"
    cd partitionX
    

답변2

실제로, 많은 검색 끝에 디렉토리를 변경하고 동일한 쉘을 유지해야 하는 경우 현재 스크립트에서 모든 답변을 얻을 수 있다는 것을 방금 발견했습니다.

(cd your_dir; do_some_command_there)

예를 들어, 내가 사용해야 했던 것은 다음과 같습니다:

((cd your_dir; git remote -v | wc -l)

매력처럼 작동합니다!

관련 정보