显示一组目录的命令提示符 (PS1) 信息

显示一组目录的命令提示符 (PS1) 信息

PS1有没有一种直接的方法来显示给定目录集的 my 结果?

为了避免XY问题,我会预先声明:我想快速检查目录中每个 git 存储库的状态。我可以循环运行git statusfor ... 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,它似乎需要你在 shell 脚本中做这样的事情:

#!/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

相关内容