簡體   English   中英

執行命令時使gitprompt運行

[英]Getting a gitprompt to run when executing commands

在bash中,我使用gitprompt顯示git存儲庫的當前狀態,因此我的PS0如下所示:[時間] [存儲庫名稱] [當前路徑] [添加/修改的文件數] $ 〜/ .bashrc我要導出PROMPT_COMMAND的位置

export PROMPT_COMMAND=$PROMPT_COMMAND';export PS1=$(gitprompt.pl c=\+ u=\~ f=\* A=\^ B=\\\\ F=\ \>\> statuscount=1)'

我也在使用屏幕(可能在此問題中起作用)。 當我創建一個新的屏幕窗口時,它會自動獲取.bashrc,因此我的PS0會以該倉庫的最新git狀態進行更新,不幸的是,這是我的PS0唯一以git狀態進行更新的時間。

我將如何設置它,以便每次在終端中運行命令或僅對某些命令運行時,git狀態都會更新?

我只需要在關閉文件,移動,刪除或復制時運行git狀態; 因此,如果我可以將提示設置為僅在這些命令上運行,那將是最好的,但是我會滿足於在每個bash命令上運行(而不將其綁定到我的返回鍵)。

這是我在〜/ .bashrc中的全部提示

export PS0='\[\e[0;32m\][\t]\[\e[1m\][\h]\[\e[0;1m\][\w]\[\e[30;1m\]%{\[\e[1;32m\][%b]\[\e[0m\][%c%u%f%t]%}%{[%B%A%F]%}\[\e[0m\]\u\$ '
PS1=$(gitprompt.pl c=\+ u=\~ f=\* A=\^ B=\\\\ F=\ \>\> statuscount=1)
export PROMPT_COMMAND=$PROMPT_COMMAND';export $PS1'

在我看來,您遇到的問題是您已經在單引號內了,因此它不想第二次解析該命令。 通過將PS1分配放入bash函數中,然后設置PROMPT_COMMAND,可能可以解決此問題:

function prompt_command() {
    PS1='$(gitprompt.pl c=\+ u=\~ f=\* A=\^ B=\\\\ F=\ \>\> statuscount=1)'
}

export PROMPT_COMMAND=prompt_command

也可以將gitprompt.pl腳本放入函數中並返回所需的結果,這樣,只有在git存儲庫中時才打印結果。 這可以通過類似於以下內容來實現:

export PS1='\[\e[1;37m\][\[\e[1;32m\]\h\[\e[1;37m\]:\[\e[1;36m\]\w\[\e[1;37m\]]$(parse_git_branch)$ \[\e[0m\]'

parse_git_branch() {
    BRANCH=$( git branch --no-color 2> /dev/null )
    # only run the gitprompt script if we're in a git repository
    if [ -n "$BRANCH" ]; then
        GITPROMPT=$(gitprompt.pl c=\+ u=\~ f=\* A=\^ B=\\\\ F=\ \>\> statuscount=1)
        printf "\e[1;33m[$GITPROMPT]\e[1;37m"
    fi
}

(注意:這未經測試,可能需要進行一些調整)

您想要這樣的東西:

PS1="\$(gitprompt.pl) "

也就是說:通過轉義命令擴展,防止立即評估gitprompt.pl。

這樣,只要需要顯示PS1,您的$(gitprompt.pl)就會被評估。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM