현재 디렉터리가 다음과 같은지 테스트할 수 있습니다.
[[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == true ]] && echo yes
..하지만 현재 작업 디렉토리가 아닌 디렉토리에서 동일한 작업을 어떻게 수행합니까?
답변1
그냥 사용-C
글로벌 옵션git
. 이렇게 하고 코드를 단순화하세요(반환 상태에 직접 인코딩된 정보를 재구성하기 위해 출력을 구문 분석하는 이유는 무엇입니까?).
directory=. # or wherever
if git -C "$directory" rev-parse --is-inside-work-tree >/dev/null 2>/dev/null; then
echo yes
fi
답변2
가장 쉬운 옵션은 일시적으로 디렉토리로 변경하는 것입니다.
(cd /path/to/target && [[ $(git rev-parse --is-inside-work-tree) == true ]]) 2> /dev/null && echo yes
답변3
대상 디렉터리로 이동하고 거기에서 명령을 실행하고 결과를 반환하는 함수를 사용하여 이 작업을 수행하겠습니다.
isGitDIr(){
for dir in "$@"; do
(
cd "$dir" || return
[[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == true ]] &&
echo "yes"
)
done
}
괄호로 인해 명령이 하위 쉘에서 실행되므로 함수가 완료될 때 상위 쉘의 디렉토리가 변경되지 않습니다. 이러한 줄을 셸의 초기화 파일(예: ~/.bashrc
)에 추가하거나 터미널에 직접 붙여넣으면 다음을 수행할 수 있습니다.
isGitDIr /path