
쉘 스크립트의 명령은 pwd
쉘 스크립트가 있는 디렉토리를 출력합니까?
답변1
여기에는 세 가지 독립적인 "디렉토리"가 있습니다.
- 현재 쉘의 현재 작업 디렉토리,
- 쉘 스크립트의 현재 작업 디렉토리
- 쉘 스크립트가 포함된 디렉토리.
독립적임을 입증하기 위해 다음을 포함하는 /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 쉘 내장표준 시스템 바이너리. 둘 중 하나인쇄물논리적이든 물리적이든현재 작업 디렉토리, 이는 일반적으로 다음과 같습니다.
- 스크립트나 바이너리를 호출할 때 디렉터리 구조에서의 위치입니다.
- 작업 디렉토리를 변경한 후 현재 위치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