현재 작업 디렉터리를 변수에 전달하는 스크립트를 원합니다. 디렉토리가 필요한 부분은 이렇습니다 dir = pwd
. pwd
현재 작업 디렉토리를 변수에 넣는 방법 만 인쇄합니다 .
답변1
그럴 필요는 없어 이미 이렇게 됐어존재하다변수:
$ echo "$PWD"
/home/terdon
변수 PWD
는POSIX에 의해 정의됨모든 POSIX 호환 쉘에서 작동합니다.
장애인
쉘 및 CD 유틸리티로 설정됩니다. 셸에서는 아래와 같이 환경에서 값을 초기화해야 합니다. PWD 값이 실행 시 환경의 셸로 전달되는 경우 값은 현재 작업 디렉터리의 절대 경로 이름이고 {PATH_MAX}바이트(종료 null 바이트 포함)를 초과하지 않으며 값에 다음이 포함되지 않습니다. 점 또는 점-점 구성 요소인 경우 셸은 PWD를 환경의 값으로 설정해야 합니다. 그렇지 않고 실행 시간 환경이 현재 작업 디렉터리의 절대 경로 이름인 PWD 값을 셸에 전달하고 해당 값에 점 또는 점-점 구성 요소가 포함되어 있지 않으면 셸이 PWD를 다음으로 설정한다고 지정하지 않습니다. 환경의 값은 여전히 PWD를 pwd -P에 의해 출력된 경로 이름으로 설정합니다. 그렇지 않으면 sh 유틸리티는 PWD를 pwd -P에 의해 출력된 경로 이름으로 설정합니다. PWD가 환경의 값으로 설정된 경우 해당 값에는 기호 링크 유형 파일을 참조하는 구성 요소가 포함될 수 있습니다. PWD가 pwd -P에 의해 경로 이름 출력으로 설정된 경우 현재 작업 디렉터리 또는 해당 디렉터리의 상위 디렉터리에 경로 이름을 결정할 수 있는 충분한 권한이 없으면 PWD 값이 지정되지 않습니다. 이 변수에 대한 할당은 무시될 수 있습니다. 응용 프로그램이 PWD 값을 설정하거나 설정 해제하는 경우 cd 및 pwd 유틸리티의 동작은 지정되지 않습니다.
보다 일반적인 답변을 위해 명령의 출력을 변수에 저장하는 방법은 명령을 $()
또는 ` `
(백틱)로 묶는 것입니다.
var=$(command)
또는
var=`command`
두 가지 중에서 다음 $()
과 같은 복잡한 명령을 작성하는 것이 더 쉽기 때문에 선호됩니다.
command0 "$(command1 "$(command2 "$(command3)")")"
해당 백틱은 다음과 같습니다.
command0 "`command1 \"\`command2 \\\"\\\`command3\\\`\\\"\`\"`"
답변2
dir=$(pwd)
이는 백틱 방법보다 이식성이 뛰어나고 선호됩니다.
를 사용하면 $()
명령을 중첩할 수 있습니다.
예를 들어:mech_pwd=$(pwd; echo in $(hostname))
답변3
환경 변수를 사용 $PWD
하거나 다음과 같이 작성할 수 있습니다.
dir=`pwd`
답변4
현재 작업 디렉터리의 값은 다를 수 있습니다. 현재 디렉토리를 얻기 위해 심볼릭 링크를 사용하면 pwd는 /usr/bin/pwd와 다른 결과를 제공합니다. bash를 사용하고 있으므로 다음을 사용합니다.
dir=$(/usr/bin/pwd)
또는 의견에 따라:
dir=$(pwd -P)
백틱은 중첩될 수 없기 때문에 싫어하기 때문입니다.