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

현재 작업 디렉토리가 현재 이기 때문에 이 명령 /etc은 가 아니라 인쇄됩니다 . 이는 예상되는 동작입니다./tmp/etc

스크립트가 포함된 디렉토리 가져오기

아마도 현재 스크립트의 디렉터리를 찾고 싶기 때문에 이 질문을 하는 것일 것입니다. 일반적인 경우 다음은 빠르고 더러운 솔루션입니다.

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

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

물론 이것은 모두 지나치게 단순화한 것입니다. 읽어 보시기 바랍니다배쉬 매뉴얼(특히 위치 매개변수, 특수 매개변수 및BASH_SOURCE) 및 매뉴얼 페이지를 참조 readlink하면 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

관련 정보