2013-07-30 28 views

Antwort

66

Da es eine Umgebungsvariable ist (alias hat eine andere Definition in bash), können Sie es mit so etwas wie bewerten müssen:

cd "${myFold}" 

oder:

cp "${myFold}/someFile" /somewhere/else 

Aber Ich finde es tatsächlich einfacher, wenn Sie nur die Leichtigkeit des Umschaltens in dieses Verzeichnis möchten, um eine echte Alias ​​zu erstellen s (in einen der bash Startdateien wie .bashrc), so kann ich Tastatureingaben speichern:

alias myfold='cd ~/Files/Scripts/Main' 

Dann können Sie einfach verwenden (ohne cd):

myfold 

Um die Definition loszuwerden verwenden Sie unalias. Die folgenden Transkript zeigt alle davon in Aktion:

pax> cd ; pwd ; ls -ald footy 
/home/pax 
drwxr-xr-x 2 pax pax 4096 Jul 28 11:00 footy 

pax> footydir=/home/pax/footy ; cd "$footydir" ; pwd 
/home/pax/footy 

pax> cd ; pwd 
/home/pax 

pax> alias footy='cd /home/pax/footy' ; footy ; pwd 
/home/pax/footy 

pax> unalias footy ; footy 
bash: footy: command not found 
+0

Danke. Das funktioniert. Ich habe nur alias myfold = '~/some/path' und cd myfold versucht. Ich bekomme einen Fehler - kein solches Verzeichnis. Warum ? Ist es auch möglich, eine Alias-Variable zu "entfernen"? – bashboy

+0

myfold = '~/einige/pfad' cd "$ myfold" schlägt fehl. Warum ? – bashboy

+0

@Bashboy, wahrscheinlich, weil Sie kein Verzeichnis mit diesem Namen haben. ~/irgendein/Pfad war ein Beispiel, Sie sollten den _actual_ Pfad ersetzen, den Sie verwenden möchten. Ich werde es ändern, um Ihr Beispielverzeichnis zu verwenden, damit es klarer ist. Um die Zuweisung eines Alias ​​aufzuheben, verwenden Sie den Befehl unalias. Ich habe auch die Antwort mit einem Transkript aktualisiert, einschließlich der Verwendung dieses Befehls. – paxdiablo

3

Zuerst müssen Sie die $ "myFold" 's Wert für den Zugriff auf den Code in der Frage der Arbeit zu machen:

cd "$myFold" 

Um dies zu vereinfachen, können Sie einen Alias ​​in ~/.bashrc erstellen:

alias cdmain='cd ~/Files/Scripts/Main' 

Vergessen Sie nicht, die .bashrc einmal zu beziehen, damit der Alias ​​in der aktuellen Bash-Sitzung verfügbar wird:

source ~/.bashrc 

Jetzt können Sie in den Ordner wechseln mit:

cdmain 
1

sondern eine tatsächliche Alias ​​für eine Richt ist auch möglich, versuchen

myScripts="~/Files/Scripts/Main" 
alias myScripts="cd $myScripts" 

diese Weise können Sie eine gemeinsame Namenskonvention haben (für jedes Verzeichnis/Alias-Paar), und wenn Sie etwas aus dem aktuellen Verzeichnis von myScripts kopieren müssen, müssen Sie nicht darüber nachdenken.

IHTH

5

Zunächst einmal müssen Sie die Anführungszeichen entfernen:

[email protected]:~$ myFolder=~/Files/Scripts/Main 

Die Zitate verhindern, dass die Schale aus den Ausbau des Tilde auf seine besondere Bedeutung von ist Ihr $HOME Verzeichnis.

Sie dann $myFolder eine Umgebung eine Shell-Variable verwenden:

[email protected]:~$ cd $myFolder 
[email protected]:~/Files/Scripts/Main$ 

einen alias Um, müssen Sie den Aliasnamen definieren:

alias="cd $myFolder" 

Sie können dann diese Behandlung Art wie ein Befehl:

[email protected]:~$ myFolder 
[email protected]:~/Files/Scripts/Main$ 
+0

Es ist nicht wirklich eine Variable * environment *, es sei denn, Sie exportieren es. –

+0

@KeithThompson Okay, es ist nur eine _shell Variable_. Aber Sie möchten es nicht exportieren, weil Sie nicht möchten, dass es sich auf untergeordnete Prozesse auswirkt. Sie definieren es so in Ihrer '.bashrc' oder einer anderen von Ihnen verwendeten Ressourcendatei und es wird in der unmittelbaren Shell definiert, nicht jedoch in Shell-Skripten. –

+0

Ich bevorzuge diese Lösungen, weil es mit automatischer Vervollständigung funktioniert – Vassilis

1

können Sie fügen Sie alle Pfade, die Sie in die Hash-Tabelle Ihrer bash wollen:

hash -d <CustomName>=<RealPath>

Jetzt sind Sie in der Lage sein, cd ~<CustomName>. Um es dauerhaft zu machen, fügen Sie es zu Ihrem bashrc Skript hinzu.

Beachten Sie, dass diese Hashtabelle einen Cache für bash bereitstellen soll, damit bei jeder Ausführung eines Befehls nicht nach Inhalt gesucht werden muss. Daher wird diese Tabelle bei Ereignissen gelöscht, die den Cache ungültig machen, z. Änderung $PATH.

29

Es ist eine Shell-Option cdable_vars:

cdable_vars
Wenn dies festgelegt ist, ein Argument für den cd builtin Befehl, der kein Verzeichnis angenommen wird, der Name eines Variable, dessen Wert sein, ist das Verzeichnis, in das geändert werden soll.

Sie können fügen Sie diese zu Ihrer .bashrc:

shopt -s cdable_vars 
export myFold=$HOME/Files/Scripts/Main 

Beachten Sie, dass ich die Tilde mit $HOME ersetzt haben; Zitate verhindern Tilde Expansion und Bash würde sich beschweren, dass es kein Verzeichnis ~/Files/Scripts/Main gibt.

Jetzt können Sie diese wie folgt verwenden:

cd myFold 

Kein $ erforderlich. Das ist der springende Punkt, eigentlich – wie in anderen Antworten gezeigt, cd "$myFold" funktioniert ohne die Shell-Option. cd myFold funktioniert auch, wenn der Pfad in myFold Leerzeichen enthält, keine Angabe erforderlich.

Dies funktioniert in der Regel auch mit Tab Auto-Vervollständigung als _cd Funktion in bash_completion prüft, ob cdable_vars – gesetzt ist, aber nicht jede Implementierung macht es auf die gleiche Art und Weise, so dass Sie bash_completion wieder in Ihrem .bashrc beziehen könnten (oder bearbeiten /etc/profile zu Setze die Shell-Option).

1

Eine andere Option wäre die Verwendung einer symbolischen Verbindung.dh:

ln -s ~/Files/Scripts/Main ~/myFold 

Danach können Sie Operationen ~/myFold, führen wie:

cp some_file.txt ~/myFold 

die die Datei in ~/Files/Scripts/Main setzen. Sie können den symbolischen Link jederzeit mit rm ~/myFold entfernen, wodurch das ursprüngliche Verzeichnis beibehalten wird.

Verwandte Themen