Exibe informações do prompt de comandos (PS1) para um conjunto de diretórios

1

Existe uma maneira simples de exibir os resultados do meu PS1 para um determinado conjunto de diretórios?

Para evitar o Problema XY , declararei na frente: desejo verificar rapidamente o status de cada repositório git dentro de um diretório. Posso executar git status em um loop for ... do ... done , mas isso é difícil de ler.

Eu tenho oh-my-git correndo lindamente como parte do meu prompt de comando e ele exibe o status I gostaria de saber de relance. Gostaria de ver o que é dito para cada subdiretório no meu diretório repos .

Eu posso ver o que preciso chamando manualmente cd ~/repos/first-repo seguido do próximo, mas além da digitação repetitiva, eu também tenho que lembrar de todos os repos sem pular um. Eu ficaria feliz em fazer o script cd ing em cada repositório e exibir meu prompt personalizado.

    
por Dane 25.09.2017 / 07:39

2 respostas

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

ou, usando opções curtas,

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

Isso muda para cada diretório no diretório atual e executa o comando git status fornecido. A saída pode parecer algo como

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

(Eu tenho um arquivo não confirmado no repositório swefreq )

As opções escolhidas para git status mostrarão apenas a ramificação atual e todos os arquivos modificados, mas você poderá modificá-la facilmente para mostrar arquivos não rastreados como wull removendo -uno ou --untracked-files=no .

Veja git status --help .

Sua ideia de usar o prompt para mostrar informações sobre cada diretório pode funcionar dependendo de como o prompt está configurado. Meu prompt é uma string com aspas simples que deve ser avaliada:

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

Eu não acho que essa é uma solução muito boa, e também não é muito flexível no que ela pode fazer e falar sobre cada repositório.

    
por 25.09.2017 / 08:09
1

Olhando oh-my-git, parece que você precisa fazer algo assim em um shell script:

#!/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
    
por 25.09.2017 / 17:51