Wie setze ich $ -Variablen in Unix?

19987
Lazer

Zum Beispiel gibt es einen langen Weg, den ich cdsehr oft gehe. Wie speichere ich den Pfad in einer Variablen, damit ich ihn jederzeit verwenden kann?

Zum Beispiel: Ich möchte das können

cd $path 

anstatt

cd /a/b/c/d/e/f 

jedes Mal.

6
Verwenden Sie die "C-Shell" ("csh") oder die üblichere Borne / Bash-Shell ("sh" bzw. "bash")? mctylr vor 14 Jahren 1
@mctylr: C-Schale Lazer vor 14 Jahren 0

6 Antworten auf die Frage

10
Paul Nathan

In Bash shell:

export FOO="/a/b/c"

And you don't want to use $path. That's a special variable.

+1 Ein guter Punkt, wenn Sie $ path nicht verwenden. Das wäre schlecht. DaveParillo vor 14 Jahren 2
$ PATH ist eine spezielle Variable, $ path nicht. Ich würde es trotzdem vermeiden, es zu benutzen. John T vor 14 Jahren 10
Sie benötigen wahrscheinlich keinen Export: Nur "foo = / a / b / c" würde ausreichen, wenn Sie nur auf diese Variable in der aktuellen Shell verweisen müssen. Wenn Sie möchten, dass die Variable an untergeordnete Prozesse weitergegeben wird (z. B. wenn Sie andere Programme von der Shell aus ausführen), benötigen Sie den Exportbefehl. njd vor 14 Jahren 2
$ path ist in Ordnung, wie oben erwähnt. Und diese Frage ist mit csh getaggt, und diese Syntax ist für bash. Justin Smith vor 14 Jahren 0
7
Dennis Williamson

Es ist unwahrscheinlich, dass Sie Ihre Variable in der Umgebung benötigen.

In csh können Sie stattdessen Folgendes setenvtun:

set dir="/a/b/c/d/e/f" cd $dir 

oder in Bash statt export:

dir="/a/b/c/d/e/f" cd $dir 
Was sind die Unterschiede zwischen einem `set dir =" / a / b / c / d / e / f "` und `setenv dir" / a / b / c / d / e / f "`? Lazer vor 14 Jahren 0
@Lazer: `setenv` exportiert Variablen, sodass sie in untergeordneten Prozessen verfügbar sind. set setzt Variablen, die nur in der aktuellen Umgebung (Skript oder interaktive Shell) verwendet werden. In den meisten Fällen müssen Sie nur "set" verwenden. `Set` unterstützt auch Arrays und` setenv` nicht. Dennis Williamson vor 14 Jahren 0
6
akira

assuming you really want csh/tcsh syntax (as you have tagged your question), put this

setenv P1 "/a/b/c/d/e/f" 

to your .tcshrc

after that you are able to do

cd $P1 
3
Satanicpuppy

Use export.

export your_path="/a/b/c/d/e/f"

cd $your_path

If you want it to persist through logins, you're going to need to edit it into your .profile file.

Oder `~ / .bash_profile` oder für den systemweiten Effekt` / etc / profile`. +1 für die Erwähnung, auf jeden Fall beharrlich zu sein. Jonik vor 14 Jahren 1
Das ist für die falsche Schale. Er wollte csh. Justin Smith vor 14 Jahren 1
Sie brauchen fast nicht "export" zu verwenden. In Bash oder `sh` ist` your_path = "/ a / b / c / d / e / f" `fast immer ausreichend. Dennis Williamson vor 14 Jahren 0
0
kmarsh

Für csh möchten Sie wahrscheinlich cdpath verwenden . Verwenden Sie für Bash stattdessen CDPATH .

Zum Beispiel (bash):

prompt$ export CDPATH=:/a/b/c/d/e  prompt$ cd f cd /a/b/c/d/e/f 

Sie können auch weitere durch Doppelpunkt getrennte Verzeichnisziele hinzufügen. Behalten Sie den führenden Doppelpunkt, damit CDPATH zuerst Ihr aktuelles Arbeitsverzeichnis überprüft!

0
phogg

Wenn Sie den Pfad nur für eine Sitzung verwenden möchten, legen Sie die Variable wie gewohnt fest

set long="/some/long/path/to/a/directory" 

Sie können dann cd "$long"so oft wie Sie möchten, bis die Shell beendet wird oder Sie longerneut festlegen .

Wenn Sie daran interessiert sind, dass die Variable für Prozesse verfügbar ist, die in der Shell-Sitzung ausgeführt werden, sollten Sie sie in Ihrer Umgebung festlegen

setenv long "/some/long/path/to/a/directory" 

Wenn Sie möchten, dass die Variable für jede Sitzung verfügbar ist und nicht nur für die aktuelle, müssen Sie sie in Ihrer Shell-Ausführungssteuerung festlegen.

$EDITOR ~/.cshrc 

Fügen Sie dann die setZeile oder die setenvZeile hinzu, die oben angezeigt wird, um die Variable oder Umgebungsvariable für jede Sitzung von csh automatisch festzulegen.