bash satır içi takma adları nasıl genişletilir?


84

Diğer ad satırlarını bash içerisinde genişletmenin bir yolu var mı?

$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l 

Yanıtlar:


107

Takma adı, geçmişi ve sözcük genişlemelerini yapacak okuma satırı işlevini gerçekleştirmek için Ctrl- Alt- tuşuna basabilirsiniz . Bazı klavyelerde olmadığını unutmayın . O zaman basmanız gerekebilir -eshell-expand-lineMetaAltEscCtrle

Fonksiyonlar alias-expand-lineve history-and-alias-expand-linevarsayılan olarak bağlı olmayan, ancak aşağıdaki benzer satırları ekleyerek bunları bağlayabilir ~/.inputrcdosyası.

"\e\C-l": alias-expand-line

bulunması şeklinde Ctrl- Alt- l(küçük harfle "ell") gerçekleştirmek sadece takma ad.


Diğer bash tamamlamalarını etkilemeden takma ad genişlemesini <tab> olarak eşleyebilir miyiz?
asdfg

2
@ asdfg: Eğer yaparsanız, diğer tamamlamaları bozacaktır. Bu belki yukarıda gösterildiği gibi harita oluşturmak için (denenmemiş) çalışması ve ardından Tab için varolan bir yerine bu ek harita ekleyin: "\C-i": "\e\C-l\e\e"Her iki gerçekleştiren bir makro oluşturur alias-expand-lineve complete. Bu benim cevabımdaki bağlamaya ve Esc-Esc için varsayılan bağlamanın yerinde kalmasına bağlı. Varsayılan tamamlama işlemini yapmak isteseydiniz yine de Esc-Esc'i yapabileceksiniz.
Dennis Williamson

4
Nitekim, ESC C-eBash C-x aiçin çalışıyor ama Zsh için çalışıyor. Ayrıca OS X üzerinde de test edilmiştir.
Blaz

Sadece bir şey "x" tuşuna olabilir Ctrl + şey, arıyorsanız, bazı sistemlerde böyle yapabilirsiniz: Control-x: history-and-alias-expand-line.
igordcard

1
@WeijunZhou: Bu, pencere yöneticinize ve sahip olduğunuz özel ayarlara bağlıdır. Örneğin Gnome için kilit ekranı Süper + L'dir.
Dennis Williamson,

2

Bu aslında, yapmaya çalıştığınız şeyi yapmanın çok daha basit bir yolu olabilir ( bashsürüm> = 4.2.29):

shopt -s direxpand
shopt -s expand_aliases

shopt'nın mansayfası: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html


3
Bu yanlış. Kabuk seçenekleri "direxpand" ve "expand_aliases", sorunun belirtildiği gibi takma adların satır içi genişlemesine yardımcı olmaz. Hangi şapkadan "direxpand" alındığını bilmiyorum ...? Varsayılan olarak, "expand_aliases" ayarlanmış Ayarladıysanız, sonuç temel olarak takma adların çalışmasını devre dışı bırakmaktır (komut satırının yorumlanmasından önce genişletilmezler). Örneğin, bir diğer ad verilirse alias ll='ls -l, kabuk 'll' komutunu, 'll' komutunu / işlevini, muhtemelen bulunmadığını yorumlayacaktır.
FooF

0

Bu çalışmıyor. Ama böyle bir şeyin yapmak istediğinizi yapmak için yapılabileceğini umuyorum / umuyorum. Kendi tamamlama komut dosyanızı kullanmanız gerekir. İşte böyle yaparsın:

_ll()
{
     COMPREPLY=(ls -l)
     #The next line does not work. I just hope there were a way to replace that word
     COMP_WORDS[COMP_CWORD-1]="ls -l"
}
complete -F _ll ll

Şimdi tam bash_completion dosyasını ( http://caliban.org/bash ) kaynaklayın ve yukarıda belirtilen betiği, url'den aldığınız betiğin bash_completion.d dizini içindeki bir dosyaya koyun. İşe yaramazsa bana haber ver.

Teşekkürler.


0

Zsh'nin basit bir çözüm arayan kurulu olduğu kişiler için, globalialar arkadaşınız olabilir

Tüm genel ifadeleri, alt komutları ve diğer adları (global dahil) genişletir.

# .zsrc:
alias S="sudo systemctl"

$ S<space>
# expands to:
$ sudo systemctl

yüklemek için sadece "globalias" eklemek .zshrc eklenti listesine

plugins=(... globalias)

Sonra sadece SPACEyazdığınız bir komutun genişlemesini tetiklemek için basın .

Yalnızca komut satırını genişletmeden boşluk eklemek istiyorsanız, CTRL+SPACE

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.