Kann ich in Bash einen benutzerdefinierten "Verzeichnis-Alias" wie "~" erstellen?

13

In Bash kann ich cd ~mit jedem Befehl mit in mein Home-Verzeichnis gehen und tatsächlich auf mein Home-Verzeichnis verweisen ~.

Kann ich neue, benutzerdefinierte "Verzeichnis-Aliase" (?) Erstellen, um auf andere Verzeichnisse zu verweisen? Hypothetisches Beispiel:

make_alias "~~" /mnt/photon/work/foo_project/

cp ~/home.png ~~/set_8/home_4.png

Wie kann es gemacht werden, wenn ja? Wenn nicht, ist es beabsichtigt und warum?

Schön zu haben: Wo und wie ~wird dieses "~" gesetzt und gebunden?

n611x007
quelle
1
Nicht besonders hilfreich für Sie, aber Sie können dies mit globalen Aliasnamen in ... ZSH tun, aber nicht mit BASH. : alias -g ~~ = '/ mnt / photon / work / foo_project /'
SuperMagic
1
@ SuperMagic: Ich mag auch globale Aliase. Aber im zweiten Beispiel (cp ~~ / set ...) werden sie fehlschlagen. Benannte Verzeichnisse sind besser geeignet: n=/mnt/photon/work/foo_projectund dann cp foo ~n/bar. (Hinweis für das OP: Auch auf zsh beschränkt).
Mpy
1
@OliverSalzburg: Ich denke nicht, dass dies ein Duplikat ist. Die andere Frage fragt nach Neuzuordnungen einzelner Zeichen ( @oder _), was in Bash nicht möglich ist, während dies ~~sicherlich der Fall ist (hackig, aber möglich). Außerdem wird nicht beantwortet, wie diese Neuzuordnung durchgeführt wird.
Dennis
Die damit verbundene Frage war: superuser.com/questions/541767
n611x007

Antworten:

25

Die Tilde ist kein Alias, sondern Teil der Shell-Erweiterung von bash (genau wie *.txtoder $((1 + 2))).

Die Bash-Tilde-Erweiterung unterstützt die folgenden Tilde-Präfixe:

~            The value of $HOME

~/foo        $HOME/foo

~fred/foo    The subdirectory foo of the home directory of the user fred

~+/foo       $PWD/foo

~-/foo       ${OLDPWD-'~-'}/foo

~N           The string that would be displayed by `dirs +N'

~+N          The string that would be displayed by `dirs +N'

~-N          The string that would be displayed by `dirs -N'

dirsverwendet den Verzeichnisstapel. Sie können pushdein Verzeichnis hinzufügen.

Um Ihre spezielle Frage zu beantworten ~~, ist es möglich , ein Verzeichnis zuzuordnen. Erstellen Sie einfach einen Benutzer namens ~und legen Sie ihn /mnt/photon/work/foo_project/als Ausgangsverzeichnis fest:

sudo useradd '~'
sudo sed -i 's#:/home/~:[^:]*$#:/mnt/photon/work/foo_project:/bin/false#' /etc/passwd

Ein viel "vernünftigerer" Ansatz besteht natürlich darin, nur eine Shell-Variable zu definieren, die ~/.bashrcmit dem Befehl auf Ihr Verzeichnis in Ihrem Verzeichnis verweist

foo=/mnt/photon/work/foo_project

auf die $foowie gewohnt zugegriffen werden kann.

Dennis
quelle