一連のディレクトリのコマンドプロンプト(PS1)情報の表示

一連のディレクトリのコマンドプロンプト(PS1)情報の表示

PS1特定のディレクトリセットの結果を表示する簡単な方法はありますか?

避けるためにXYの問題、あらかじめお話しますが、ディレクトリにあるすべてのgitリポジトリの状態をすばやく確認したいと思います。繰り返し実行できますが、git status読みfor ... do ... doneにくいです。

私は持っていますああ、このくそコマンドプロンプトの一部としてうまく機能し、私が見たい状態を一目でわかります。私のディレクトリにある各サブディレクトリの内容を見たいのですがrepos

以下を手動で呼び出すと、必要なものがわかりますが、cd ~/repos/first-repo繰り返し入力するだけでなく、1つもスキップせずにすべてのリポジトリを覚えておく必要があります。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

関連情報