Bash'da '~' gibi özel bir “dizin takma adı” yapabilir miyim?


13

Bash ile ana dizinime gidebilir cd ~ve aslında herhangi bir komutla ana dizinime başvurabilirim ~.

Diğer dizinlere başvurmak için yeni, özel "dizin diğer adları" (?) Yapabilir miyim? Varsayımsal örnek:

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

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

Öyleyse nasıl yapılabilir? Eğer yapamazsa, tasarım gereği ve neden böyle?

Sahip olmak güzel: Nerede ve nasıl ~bu "~" ayarlanır ve ona bağlanır?


1
Sizin için özellikle yararlı değil, ama bunu global takma adlarla yapabilirsiniz .... ZSH, ancak BASH. : takma ad -g ~~ = '/ mnt / foton / iş / foo_project /'
SuperMagic

1
@SuperMagic: Küresel takma adları da seviyorum. Fakat ikinci örnekte (cp ~~ / set ...) başarısız olurlar. Adlandırılmış dizinler daha uygundur: n=/mnt/photon/work/foo_projectve sonra cp foo ~n/bar. (OP için not: Ayrıca zsh ile sınırlıdır).
mpy

1
@OliverSalzburg: Bunun bir kopya olduğunu sanmıyorum. Diğer soru, bash'ta mümkün olmayan tek karakterli uzaklaştırma ( @veya _) hakkında soruyor , ancak ~~kesinlikle (hacky, ancak mümkün). Ayrıca, bu yeniden eşlemenin nasıl yapıldığına cevap vermez.
Dennis

Yanıtlar:


25

Tilde bir takma ad değil, bash'ın kabuk genişlemesinin bir parçası (tıpkı *.txtveya gibi $((1 + 2))).

Bash tilde genişletmesi aşağıdaki tilde öneklerini destekler:

~            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'

dirsdizin yığınını kullanır. pushdBir dizin eklemek için kullanabilirsiniz .

İle ilgili özel sorunuza cevap vermek için ~~, evet, bir dizini ona eşlemek mümkündür . Sadece adlı bir kullanıcı oluşturun ve ana dizini olarak ~ayarlayın /mnt/photon/work/foo_project/:

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

Tabii ki, çok "akılcı" bir yaklaşım sadece ~/.bashrckomut ile dizininizi gösteren bir kabuk değişkeni

foo=/mnt/photon/work/foo_project

$fooher zamanki gibi erişilebilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.