일련의 디렉터리에 대한 명령 프롬프트(PS1) 정보 표시

일련의 디렉터리에 대한 명령 프롬프트(PS1) 정보 표시

PS1특정 디렉터리 집합에 대한 결과를 표시하는 간단한 방법이 있습니까?

피하기 위해XY 문제, 미리 말씀드리지만, 디렉터리에 있는 모든 git 저장소의 상태를 빠르게 확인하고 싶습니다. 반복해서 실행할 수는 있지만 git status읽기 for ... do ... done가 어렵습니다.

나는 가지고있다아 이런 젠장명령 프롬프트의 일부로 훌륭하게 작동하며 내가 보고 싶은 상태를 한눈에 보여줍니다. 내 디렉토리에 있는 각 하위 디렉토리의 내용을 보고 싶습니다 repos.

다음을 수동으로 호출하면 필요한 것이 무엇인지 알 수 있지만 cd ~/repos/first-repo반복적으로 입력하는 것 외에도 하나도 건너뛰지 않고 모든 저장소를 기억해야 합니다. cd각 저장소에 스크립트를 작성하고 사용자 정의 프롬프트를 표시하고 싶습니다 .

답변1

for rep in */; do
    printf '%s:\t' "$rep"
    ( cd "$rep" && git status --short --branch --untracked-files=no )
done

또는 짧은 옵션을 사용하세요.

for rep in */; do
    printf '%s:\t' "$rep"
    ( cd "$rep" && git status -sbuno )
done

그러면 현재 디렉터리의 모든 디렉터리로 변경되고 지정된 git status명령이 실행됩니다. 출력은 다음과 같습니다.

gnomad_browser/:        ## master...origin/master
swefreq-browser/:       ## gnomad-remerge...origin/gnomad-remerge
swefreq-config/:        ## develop...origin/develop
swefreq/:       ## feature/schema-update...origin/feature/schema-update
 M sql/swefreq.sql

(저장소에 커밋되지 않은 파일이 있습니다 swefreq)

여기에서 선택한 옵션은 현재 분기와 수정된 파일만 표시하지만 또는 를 제거하여 추적되지 않은 파일을 표시 git status하도록 쉽게 수정할 수 있습니다 .-uno--untracked-files=no

바라보다 git status --help.


프롬프트를 사용하여 각 디렉토리에 대한 정보를 표시하려는 아이디어는 프롬프트 설정 방법에 따라 작동할 수 있습니다. 내 프롬프트는 평가해야 하는 작은따옴표 문자열입니다.

for rep in */; do
    ( cd "$rep" && eval echo "$PS1" )
done

나는 이것이 매우 좋은 해결책이라고 생각하지 않으며, 각 저장소에 대해 수행하고 알려주는 작업이 그다지 유연하지 않습니다.

답변2

oh-my-git을 보면 쉘 스크립트에서 다음과 같은 작업을 수행해야 하는 것 같습니다.

#!/bin/bash
source ~/.oh-my-git/prompt.sh
for d in dir1 dir2...
do cd "$d"
   pwd
   bash_prompt      # recalculate PS1 value
   echo -en "$PS1"
done

관련 정보