it-swarm.com.de

Wie erstelle ich einen "Alias" für einen langen Weg?

Ich habe versucht, einen "Alias" für einen Pfad zu erstellen, den ich während der Shell-Skripterstellung häufig verwende. Ich habe etwas versucht, aber es ist fehlgeschlagen:

myFold="~/Files/Scripts/Main"
cd myFold

bash: cd: myFold: No such file or directory

Wie bringe ich es zum Laufen?
Jedoch, cd ~/Files/Scripts/Mainworks.

78
bashboy

Da es sich um eine Umgebungsvariable handelt (der Alias ​​hat eine andere Definition in bash), müssen Sie ihn folgendermaßen auswerten:

cd "${myFold}"

oder:

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

Aber ich finde es tatsächlich einfacher, wenn Sie einfach in dieses Verzeichnis wechseln möchten, einen echten Alias ​​(in einer der bash Startdateien wie .bashrc), damit ich Tastatureingaben speichern kann:

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

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

myfold

Um die Definition loszuwerden, verwenden Sie unalias. Das folgende Protokoll 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
101
paxdiablo

Es gibt eine Shell-Option cdable_vars :

cdable_vars
Wenn dies festgelegt ist, wird angenommen, dass ein Argument für den integrierten Befehl cd, der kein Verzeichnis ist, der Name einer Variablen ist, deren Wert das Verzeichnis ist, in das gewechselt werden soll.

Sie können dies zu Ihrem .bashrc Hinzufügen:

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

Beachten Sie, dass ich die Tilde durch $HOME Ersetzt habe. Anführungszeichen verhindern die Erweiterung der Tilde und Bash würde sich darüber beschweren, dass es kein Verzeichnis gibt ~/Files/Scripts/Main.

Jetzt können Sie dies wie folgt verwenden:

cd myFold

Kein $ Erforderlich. Das ist eigentlich der springende Punkt - wie in anderen Antworten gezeigt, funktioniert cd "$myFold" Ohne die Shell-Option. cd myFold Funktioniert auch, wenn der Pfad in myFold Leerzeichen enthält und keine Anführungszeichen erforderlich sind.

Dies funktioniert in der Regel sogar mit der automatischen Vervollständigung von Registerkarten, da die Funktion _cd In bash_completion Prüft, ob cdable_vars Festgelegt ist - dies wird jedoch möglicherweise nicht bei jeder Implementierung auf die gleiche Weise durchgeführt Geben Sie bash_completion erneut in Ihrem .bashrc ein (oder bearbeiten Sie /etc/profile, um die Shell-Option festzulegen).


Andere Shells haben ähnliche Optionen, zum Beispiel Zsh ( cdablevars ).

49
Benjamin W.

Vielleicht ist es besser, Links zu verwenden

Soft Link

Symbolischer oder weicher Link (Dateien oder Verzeichnisse, flexibler und selbstdokumentierend)

#      Source                            Link
ln -s /home/jake/doc/test/2000/something /home/jake/xxx

Harter Link

Hardlink (nur Dateien, weniger flexibel und nicht selbstdokumentierend)

#    Source                            Link
ln /home/jake/doc/test/2000/something /home/jake/xxx

So erstellen Sie einen Link zu einem Verzeichnis

Hinweis : Wenn Sie den Link in Ihrem Zuhause nicht sehen möchten, können Sie ihn mit einem Punkt beginnen. ; dann wird es standardmäßig ausgeblendet, dann können Sie darauf zugreifen wie

cd ~/.myHiddelLongDirLink
8
Mahmoud Bahnasy

Zuerst brauchst du das $, um auf den Wert von "myFold" zuzugreifen, damit der Code in der Frage funktioniert:

cd "$myFold"

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

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

Vergiss nicht, das .bashrc einmal, um den Alias ​​in der aktuellen Bash-Sitzung verfügbar zu machen:

source ~/.bashrc

Jetzt können Sie in den Ordner wechseln mit:

cdmain
5
hek2mgl

Sie können beliebige Pfade zur Hash-Tabelle Ihrer Bash hinzufügen:

hash -d <CustomName>=<RealPath>

Jetzt können Sie cd ~<CustomName>. Um es dauerhaft zu machen, fügen Sie es Ihrem bashrc Skript hinzu.

Beachten Sie, dass diese Hash-Tabelle einen Cache für die Bash bereitstellen soll, damit nicht jedes Mal nach Inhalten gesucht werden muss, wenn ein Befehl ausgeführt wird. Daher wird diese Tabelle bei Ereignissen gelöscht, die den Cache ungültig machen, z. ändere $PATH.

5
Rodrigo Martins

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

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

Die Anführungszeichen hindern die Shell daran, die Tilde auf ihre spezielle Bedeutung als Ihr $HOME - Verzeichnis zu erweitern.

Sie könnten dann $myFolder eine Umgebung eine Shell-Variable:

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

Um einen Alias zu erstellen, müssen Sie den Alias ​​definieren:

alias myfolder="cd $myFolder"

Sie können diese Art von Befehl dann wie einen Befehl behandeln:

[email protected]:~$ myFolder
[email protected]:~/Files/Scripts/Main$
5
David W.

Eine andere Möglichkeit wäre die Verwendung eines symbolischen Links. dh:

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

Danach können Sie Operationen mit ~/myFold Ausführen, wie zum Beispiel:

cp some_file.txt ~/myFold

dadurch wird die Datei in ~/Files/Scripts/Main abgelegt. Sie können den symbolischen Link jederzeit mit rm ~/myFold Entfernen, wodurch das ursprüngliche Verzeichnis erhalten bleibt.

4
dvj

es ist aber auch ein tatsächlicher Alias ​​für ein Verzeichnis möglich, versuchen Sie es

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

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

IHTH

2
shellter