bash 스크립트 CD 디렉토리 입력

bash 스크립트 CD 디렉토리 입력

Mac 터미널에서 실행되는 이 bash 파일은 디렉터리를 변경할 수 없습니다. 대신 실제로 존재하더라도 부재를 보고하세요. 내가 뭐 잘못 했어요?

#!/usr/bin/env bash
set -e
read name
APPLICATION_PATH="~/Documents/meteor/apps/$name"
cd "${APPLICATION_PATH}"

답변1

두 가지 점이 있습니다.

  • 물결표 확장 문제
  • 조달 및 실행 문제.

물결표 부분의 경우 SuperUser의 최근 질문은 동일한 문제에 관한 것입니다(https://superuser.com/questions/1161493/why-bash-script-wont-extend-bashrc/1161496#1161496)

물결표는 변수 앞에서 확장되므로 cd는 경로를 찾을 수 없습니다. 이 문제를 극복하기 위해 eval명령을 다음과 같이 지정할 수 있습니다.

eval cd "${APPLICATION_PATH}"

불행하게도 스크립트를 실행할 때(호출 경로인 "+x"로 chmod를 지정했다면) $PWD가 "현재 쉘"에서 변경되지 않은 것을 볼 수 있습니다. 그러나 스크립트 끝에 이와 같은 줄을 추가하면

ls

ls새 작업 디렉터리에서 실행되는 것을 볼 수 있습니다 . 어떻게요?

답은 여기에 있습니다(https://superuser.com/questions/176783/what-is-the-difference-Between-executing-a-bash-script-and-commerce-a-bash-scrip#176788)

짧은 대답: 조달은 현재 쉘 프로세스에서 명령을 실행합니다. Execute는 새로운 쉘 프로세스에서 명령을 실행합니다. 아직도 혼란스러워요? 긴 답변을 읽어보세요.

곧 현재 셸에서 $PWD를 변경하려면 다음과 같은 스크립트를 "가져와야" 합니다.

source /path/to/script

또는

. /path/to/script

source세 번째 요점: or 를 엉망으로 만들고 싶지 않다면 .~/.bashrc(https://stackoverflow.com/questions/752525/run-bash-script-as-source-without-source-command):

별칭 mycmd="source mycmd.sh"

답변2

tilda '~'를 사용할 수 있습니다. 올바른 bash 확장 키를 켜기만 하면 됩니다.

set -x

또는 전체 경로 "/Volumes/Swap/Apps/..."를 사용하십시오.

예를 들어 bashrc를 사용하여 env 바로 가기를 설정하십시오.

export LocalApps=/Users/me/Applications
export SysApps=/Applications

eval을 어떻게 사용하는지 모르겠습니다.

명령줄에서 문자열을 읽으려면 read를 사용할 필요 없이 인수만 가져오면 됩니다.

if [[ $# -eq 1 ]]; then
    #check if it's directory
    if [[ -d $name ]] ; then
      #do stuff here
    else
      echo 'bomb'
    fi
else
  usage
fi

디렉토리에 "cd" 대신 ~+, ~-, pushd 및 popd를 사용하는 방법을 알아보세요. 실제로 디렉토리에 "cd"할 필요는 없습니다.

당신은 이런 일을 할 수도 있습니다

pushd $SysApps/$name
  do stuff 
popd

답변3

"" 안에 ~를 넣지 마세요.

#!/usr/bin/env bash
set -e
read name
APPLICATION_PATH=~/Documents/meteor/apps/$name
cd "${APPLICATION_PATH}"
pwd

답변4

또 다른 해결 방법은 사용 중인 현재 터미널 창의 스크립트에서 정확히 디렉토리로 cd하지 않더라도 osascript를 사용하여 다른 터미널을 열고 원하는 디렉토리로 cd하는 것입니다.

osascript -e "
    tell application \"Terminal\"
        do script \"cd $APPLICATION_PATH; pwd;\"
        set bounds of front window to {900, 0, 1790, 565}
    end tell"

새로운 가상 호스트를 생성하기 위한 스크립트를 작성할 때 이 방법이 효과적입니다. "앞 창 경계 설정"은 선택 사항입니다.

관련 정보