pwd는 무엇을 출력하나요?

pwd는 무엇을 출력하나요?

쉘 스크립트의 명령은 pwd쉘 스크립트가 있는 디렉토리를 출력합니까?

답변1

여기에는 세 가지 별도의 "디렉토리"가 있습니다.

  1. 현재 쉘의 현재 작업 디렉토리,
  2. 쉘 스크립트의 현재 작업 디렉토리
  3. 쉘 스크립트가 포함된 디렉토리입니다.

이들이 독립적이라는 것을 증명하기 위해 다음을 포함하는 /tmp/pwd.sh에 저장된 쉘 스크립트를 작성할 수 있습니다.

#!/bin/sh
pwd
cd /var 
pwd

그런 다음 비밀번호(위의 #1)를 /로 변경할 수 있습니다.

cd /

스크립트를 실행합니다.

/tmp/pwd.sh

먼저 기존 비밀번호를 시연한 다음(#1), /var로 변경하고 다시 표시합니다(#2). 이들 중 어느 것도 pwd/tmp/pwd.sh(#3)를 포함하는 디렉토리인 "/tmp"가 아닙니다.

답변2

현재(또는 현재) 작업 디렉터리

쉘 스크립트의 pwd 명령은 쉘 스크립트가 있는 디렉토리를 반환합니까?

아니요.

첫째, 정의에 따라 쉘 스크립트나 쉘 명령은 0 - 255 사이의 숫자 종료 상태를 제외한 어떤 것도 반환하지 않습니다. 이것은 자명하지만 일반적으로 사람들이 이런 유형의 질문을 할 때 의미하는 바는 아닙니다.

둘째, pwd둘 다이다.Bourne 쉘 내장표준 시스템 바이너리. 누구나인쇄논리적 또는 물리적현재 작업 디렉토리,일반적으로:

  1. 스크립트나 바이너리가 호출될 때 디렉터리 구조에서의 위치입니다.
  2. 작업 디렉터리 변경 후 현재 위치CD또는 Pushd 또는 Popd와 같이 현재 작업 디렉토리를 수정하는 기타 유틸리티 및 내장 기능입니다.

현재 스크립트의 디렉토리를 원하면 dirname아래 마지막 섹션에 설명된 유틸리티를 사용하십시오.

빠른 테스트pwd

무슨 일이 일어나는지 확인하기 위한 빠른 테스트로비밀번호실제로 인쇄하려면 다음 명령을 실행하면 됩니다.

# Create a shell script containing pwd.
cat <<-EOF > /tmp/test_pwd.sh
#!/bin/sh

pwd
EOF

# Make the script executable.
chmod 755 /tmp/test_pwd.sh

# Go somewhere on the filesystem, and call the test script.
cd /etc
/tmp/test_pwd.sh

현재 작업 디렉토리가 current 이기 때문에 /etc대신 인쇄됩니다 . 이는 예상된 동작입니다./tmp/etc

스크립트가 포함된 디렉터리를 가져옵니다.

현재 스크립트의 디렉터리를 찾고 싶기 때문에 이 질문을 할 수도 있습니다. 일반적으로 다음은 빠르고 더러운 솔루션입니다.

#!/usr/bin/env bash
echo $(dirname "$0")

$0이는 실행 중인 스크립트를 호출하는 데 사용되는 경로 이름이 일반적으로 포함되고 dirname유틸리티는 파일 이름 부분을 제외한 경로를 반환하기 위해 셸 확장에서 사용되기 때문에 작동합니다 . Bash 매개변수 확장을 사용하여 유사한 작업을 수행할 수 있지만 이식성이 떨어집니다 "${0%/*}".

물론 이것은 모두 지나치게 단순화된 것입니다. 읽어주세요배쉬 매뉴얼(특히 위치 매개변수, 특수 매개변수 및BASH_SOURCEreadlink) 뿐만 아니라 realpath극단적인 경우에 대한 보다 완전한 살펴보기를 위한 매뉴얼 페이지도 있으며 그 중 몇 가지가 있습니다.

그러나 일상적인 스크립팅에서는 디렉토리 구성 요소만으로도 $0알고 싶은 내용을 충분히 알 수 있습니다. 수행 중인 작업이 충분히 복잡하지만 $0실제로 필요한 정보를 저장할 수 없고 다음과 같이 더 복잡한 구성이 필요한 경우:

echo $(dirname "$(realpath "$0")")

그러면 당신의 삶이 필요 이상으로 더 어려워질 수도 있습니다.

답변3

pwd현재 작업 디렉터리를 열 수 없으면 0을 반환합니다.

mkdir /tmp/d; cd "$_"
pwd && pwd -P; echo "$?"
rmdir ../d
pwd && pwd -P; echo "$?"

/tmp/d
/tmp/d
0
/tmp/d
pwd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
1

답변4

스크립트가 있는 위치가 아니라 호출/실행된 디렉토리를 반환합니다!

이것은 try.sh입니다:

echo "The current working directory: $PWD"

이 출력은 더 명확해집니다.

[akarpe@ADM-PROD-OMNI ~]$ sh try.sh
The current working directory: /mnt/home/akarpe
[akarpe@ADM-PROD-OMNI ~]$ sh try/try.sh
The current working directory: /mnt/home/akarpe
[akarpe@ADM-PROD-OMNI ~]$ sh ./try.sh
The current working directory: /mnt/home/akarpe
[akarpe@ADM-PROD-OMNI ~]$ sh ./try/try.sh
The current working directory: /mnt/home/akarpe
[akarpe@ADM-PROD-OMNI ~]$ cd try
[akarpe@ADM-PROD-OMNI try]$ sh ./try.sh
The current working directory: /mnt/home/akarpe/try
[akarpe@ADM-PROD-OMNI try]$ sh ../try.sh
The current working directory: /mnt/home/akarpe/try

관련 정보