2012-04-02 15 views
1

Ich möchte eine benutzerdefinierte CSH-Eingabeaufforderung haben, wenn ich in einem Git Repo bin. möchte ich die Aufforderung wie folgt aussehen, wenn ich nicht Repo in einem git amCustomize CSH Prompt für Git Repo

host_name>$ 

Aber wenn ich bin in einem Git-Repo in so etwas wie dieses

host_name [GIT REPO ROOT DIR]>$ 

drehen muss ich möchte nur zeigen die Wurzel des Git Repos (GIT REPO ROOT DIR), so dass ich weiß, in welchem ​​Repo ich mich gerade befinde. Anstatt "pwd" jedes Mal zu benutzen.

Haben Sie irgendwelche Vorschläge, dies zu erreichen? Danke für die Hilfe

-Anish

+1

Verwenden Sie Csh oder Tcsh? –

+0

Ich benutze Csh. – ASK87

+0

csh (abhängig von der Version) bietet keine direkte Möglichkeit, die Eingabeaufforderung anzupassen. Sie könnten Aliase für die Befehle 'cd',' pushd' und 'popd' definieren, die' $ prompt' aktualisieren. Auf welchem ​​Betriebssystem bist du? Auf vielen Systemen ist '/ bin/csh' wirklich ein Symlink zu'/bin/tcsh'. Sind die Variablen '$ tcsh' und' $ version' gesetzt? –

Antwort

0

Ich bin immer noch ein hartnäckiger tcsh Benutzer, aber ich gab schließlich auf rohen csh und eingeschaltet aus vielen Gründen tcsh, einschließlich schreckliche Unterstützung der csh für Dinge wie diese. (Und ich kann schließlich nachgeben und zu bash wechseln, auch :-).) Dennoch ist es möglich, zu tun, wie @KeithThompson erwähnt, über Aliase:

alias cd 'chdir \!:* && update_prompt' 
alias update_prompt 'set prompt="...stuff here... "' 

wo“... hier stuff ... "kann die Verwendung von backquotes beinhalten, um etwas auszuführen, wie zum Beispiel ein Skript, um den [GIT REPO ROOT DIR] Teil zu erzeugen. (Schreiben Sie das Skript in etwas anderes als csh!)

Hinweis, während ich cd zu chdir ... aliased Sie einfach den Befehl selbst in dem Alias ​​verwenden können, die Sie mit pushd und popd benötigen.

+0

Danke @Keith Thompson und @torek. Ich habe das früher nur gemacht und es funktioniert so, wie ich es möchte. Ich wollte wissen, ob es anders geht. Aber der traurige Teil ist, dass 'git'-Befehl für ein wirklich großes Repo langsam werden kann. Ich denke an meinen Repo-Namen ohne den 'git' cmd zu finden. Ich plane, ein Skript zu schreiben, um mein 'pwd' zu analysieren und repo-Namen zu erhalten, da ich eine spezifische Verzeichnisstruktur habe. – ASK87

4

Hier ist, wie ich es für Tcsh getan habe. Setze dieses Skript irgendwo in deinen Pfad; nennen es CGB:

#!/bin/bash 
git branch 2> /dev/null | grep '^*' | awk '{ print $2; }' 

In Ihrem .tcshrc,

alias precmd 'set cgb=`cgb`' 
set prompt='...your-prompt-string... (%$cgb) % ' 

precmd vor jeder Eingabeaufforderung ausgeführt wird. Wenn Sie nur vor dem Ändern von Verzeichnissen ausgeführt werden möchten, verwenden Sie stattdessen den Alias ​​cwdcmd. Ich bevorzuge precmd, da es zum Beispiel beim git checkout ausgeführt wird.

+2

Nach http://stackoverflow.com/questions/1593051/how-to-programmatic-determine-the-current-checked-out-git-branch, sollte ich nicht "git branch" in Skripten verwenden, da es ist ein Porzellanbefehl. Ersatz: "git rev-parse - symbolic-full-name - Abkürzungs-ref HEAD 2>/dev/null" für "Git-Zweig ..." oben. –