쉘 스크립트는 사용자가 실행 중인 디렉토리를 알 수 있습니까? 나는 하위 디렉터리 목록을 살펴보고 거기에서 일부 git 명령을 실행하는 이와 같은 스크립트를 개발하려고 합니다. 한 가지 방법은 이를 전달하는 것일 수 있지만 pwd
몇 가지 추가 매개변수가 필요하므로 내장 함수를 사용하여 작업 디렉터리를 가져오고 싶습니다.
이 예에서는 현재 디렉터리를 가정합니다.
#!/bin/bash
for d in */ ; do
echo ""
echo "===================="
echo ""
echo "$d"
git -C "$d" remote show origin
echo ""
echo "===================="
echo ""
done
답변1
POSIX 셸(예: )을 실행하고 POSIX 셸의 특수 변수 (하위 프로세스에서 상속되고 명령 실행 중에 저장되는 프로세스 속성) bash
에 현재 작업 디렉터리에 대한 경로를 생성합니다 . fish
-like shell에 $PWD
해당하는 것은 .csh
$cwd
이 변수는 동적입니다. 현재 디렉토리를 변경하는 명령(예: cd
(또는 일부 쉘에서는 / pushd
))을 호출한 후 해당 내용이 변경될 수 있습니다. popd
POSIX 쉘은 또한 $OLDPWD
호출이 성공하기 전의 이전 작업 디렉토리를 포함하는 변수를 유지합니다 cd
.pushd
popd
이 pwd
명령은 현재 디렉터리의 경로를 인쇄합니다. POSIX 셸에서 이 명령은 일반적으로 내장되어 있으며 $PWD
.
스크립트가 시작될 때 작업 디렉터리를 알고 싶다면 다음과 같이 스크립트 시작 부분에 기록해야 합니다.
#! /bin/sh -
original_PWD=$PWD
...
cd ...
상위 프로세스의 현재 작업 디렉토리를 알기 위해 GNU/Linux에서는 다음을 수행할 수 있습니다.
parent_PWD=$(readlink -ve "/proc/$PPID/cwd")
하지만 귀하는 항상 이 정보에 접근할 수 있는 것은 아닙니다. 부모님이 돌아가시면 귀하 init
는 수확자(있는 경우)에게 입양되거나 입양됩니다. 하지만 $PPID
그럴 것이다아니요업데이트되므로 이 경우 잘못된 프로세스의 cwd를 얻을 수 있습니다(상위 프로세스의 pid가 재사용된 경우).
답변2
물론 스크립트는 이를 실행하는 쉘/프로그램의 현재 디렉토리를 상속받습니다. 따라서 스크립트 cd
자체가 그렇게 하지 않는 한 모든 파일 이름 참조는 해당 파일 이름을 기준으로 합니다. 스크립트 파일 자체의 위치를 아는 것은 어렵고 거의 불가능합니다.
답변3
이 작업을 수행하는 환경 변수는 없다고 생각하지만, 많은 명령 없이도 쉽게 사용할 수 있도록 직접 만들 수 있습니다.
예를 들어:
#!/bin/bash
starting_dir=$(pwd) #use pwd to get the starting directory
#do things
cd some_example_dir/
#do more things
cd $starting_dir #go back to the directory
이 경우에는 시작 디렉터리의 경로를 변수에 문자열로 저장하면 됩니다 $starting_dir
. 절대경로로 저장되어 cd
언제든지 접근이 가능합니다.