Ist es möglich, Umgebungsvariablen im Pfad des Arbeitsverzeichnisses zu haben: PS1?

385
mthpvg

Ich bin auf Lubuntu und benutze bash. Meine PS1 (in .bashrc) ist:

PS1="\w> " 

Ich mag es, weil ich das Arbeitsverzeichnis ständig einfügen muss. Das Problem ist, dass der Pfad immer sehr lang ist, und da ich Terminator verwende, habe ich nur die Hälfte meiner Bildschirmbreite zur Verfügung, um ihn anzuzeigen. Das ist hässlich und nervig. Meine Eingabeaufforderung sieht so aus:

/this/is/a/very/long/path/that/i/want/to/make/shorter > 

Ich möchte in meiner Umgebungsvariablen einstellen:

$tiavl=/this/is/a/very/long 

Und dann bekomme ich:

$tiavl/path/that/i/want/to/make/shorter > 

Das Ziel ist, etwas kürzer in der Eingabeaufforderung zu haben, aber ich möchte trotzdem in der Lage sein, es zu kopieren und es zu tun:

cd $tiavl/path/that/i/want/to/make/shorter 

Es ist ein bisschen wie mit $ HOME:

~/path/that/i/want/to/make/shorter > 

Ich weiß wo ich bin und ich kann das ~ einfügen.

Vielen Dank.

1

3 Antworten auf die Frage

2
Mat

Sie können dies mit einer kleinen Hilfsfunktion wie /homefolgt tun (verwenden Sie als Beispiel den Präfixpfad):

~ > pwd /home/me ~ > tiavl=/home ~ > prompt_path () { echo $; } ~ > export PS1="\$(prompt_path \w) > " $tiavl/me >  

Hierbei wird eine einfache Zeichenfolgenbearbeitungsfunktion (siehe hier für viele Beispiele) in der Funktion verwendet, um den ursprünglichen Teil des Pfads durch ein Literal zu ersetzen, $tiavlfalls er übereinstimmt.

Hier ist eine Demo zum Aktualisieren dieser Funktion für mehrere Pfade.

#! /bin/sh  path1=/home path2=/usr path3=/var  prompt_path() { local path path="$" path="$" path="$" echo "$path" }  prompt_path $HOME prompt_path /usr/local prompt_path /var/tmp 
Scheint mir gut zu sein. Eine Frage: Wenn ich mehrere Präfixpfade haben möchte, kann ich nicht sehen, wie es funktionieren kann. Ich schreibe ein paar bash-Skripte, aber ich bin nicht sicher mit der String-Manipulation ... Ich lese Ihren Link. mthpvg vor 11 Jahren 0
Die Demo von Mat beantwortet meine Frage vollständig. Danke, Mat. Ich verstehe die Substitution mit der von ihm angegebenen Verbindung. mthpvg vor 11 Jahren 0
1
samir

If you copy paste in the terminal, you can just use $PWD environment variable which will always show you the working directory.

echo $PWD 

shows the working directory.

Es war mehr nach mehrmaligem Wechseln des Verzeichnisses oder Kopieren durch Einfügen von einem anderen Terminal. Danke trotzdem. mthpvg vor 11 Jahren 0
@mthpvg Kennen Sie die Tools "pushd" und "popd"? Bernhard vor 11 Jahren 1
Danke dafür, dachte immer, es wäre wie "CD -" ... es ist nicht. Es funktioniert aber nur innerhalb eines Terminals. Ich werde es trotzdem benutzen :). mthpvg vor 11 Jahren 0
0
mthpvg

Im Grunde machst du also ein Bash-Skript:

prompt_path 

was beinhaltet :

#! /bin/sh path="$" path="$" path="$" echo "$path" 

Sie platzieren es in einem Ordner wie:

~/.local/bin 

Sie geben x zu Ihrem Skript:

chmod u+x prompt_path 

In Ihrem ~ / .bashrc:

1 - Sie ändern PS1 in:

PS1="\$(prompt_path \w) > " 

2 - Sie fügen diese Zeilen hinzu:

export path1=/home export path2=/usr export path3=/var 

3 - Sie geben an, dass Sie Ihr Skript von überall aus aufrufen können:

export PATH=~/.local/bin:$PATH 

Zum Schluss erhalten Sie Ihre .bashrc:

. ~/.bashrc