Come espandere * sulla riga di comando di Bash


34

Capisco che se si digita ls *in realtà è espansa a ls a b cquando la corrente è direttamente i file a, be c.

Mi chiedevo se c'è un modo per espandere questo prima di premere invio. Simile a come funziona Ctrl + X , o come funziona la scheda completa .

Quindi, per chiarirmi

$ ls *
<press magic key>
$ ls a b c

in modo simile a:

$ ls ~/
<press tab>
$ ls /home/username

Pensavo di averlo visto prima, ma avrei potuto sbagliarmi.


Bene, so ben poco ma il meglio che conosco è $ echo * <ENTER> Potresti farlo prima del comando ls *. Ovviamente non è abbastanza colpire la scheda o un collegamento per espanderlo ovviamente.
barlop

Ma forse gli utenti di Linux non farebbero nulla di simile a ls * molto perché probabilmente non è necessario con ls, ma anche il globbing si comporta in modo diverso su shell diverse, quindi non è portatile, ma quando conveniente va bene. Ma nel caso di non è necessario. * * elenca le directory, ma non tanto per quello che ls è progettato per fare.
barlop

Risposte:


19

Puoi usare la glob-expand-wordfunzione, da man bash:

La parola prima del punto viene considerata come un modello per il percorso
espansione e viene inserito l'elenco dei nomi file corrispondenti,
sostituendo la parola. Se viene fornito un argomento numerico, un
l'asterisco viene aggiunto prima dell'espansione del nome percorso.

Aggiungi qualcosa di simile al tuo ~/.inputrc:

Control-x: glob-expand-word

Quindi $ ls *seguito da Ctrl-Xsi espanderà a $ ls a b c, nel tuo esempio.


8
Dovrebbe già essere vincolato. E Ctrl-x è già associato come prefisso a un mucchio di cose. Fare bind -p | grep 'C-x'per vederli.
In pausa fino a nuovo avviso.

Questo è esattamente quello che stavo cercando! Grazie
bramp

@Dennis, non era già associato, ma aggiungendolo al mio .inputrc ha. Immagino che sia l'impostazione predefinita di Debian.
Bramp

3
@Dennis: è legato al C-x*mio sistema.
cYrus,

23

In bash, la funzionalità readline viene chiamata glob-expand-worded è associata per CtrlX*impostazione predefinita.


11

Quando sei in vimodalità ( set -o vi), la "chiave magica" è Esc*. Funziona con entrambi bashe ksh.


Giusto per essere chiari ai vibratori, prima digita l'asterisco mentre digiti normalmente la riga di comando, quindi scappa dalla modalità di modifica, il cursore si posizionerà sull'asterisco se scappi immediatamente, quindi premi l'asterisco con il cursore situato sull'asterisco e il glob sarà espandi e rilascia di nuovo in modalità modifica.
NeilG

4
$ bind -q glob-expand-word
glob-expand-word può essere invocato tramite "\ Cx *".

$ bind -q insert-completions
inserimenti-completamenti possono essere invocati tramite "\ e *".

Quindi per usare questi possiamo fare

ls * Ctrl+x *

o

ls * Esc *

Espandi le linee complicate prima di premere invio


Questa è la risposta migliore perché cerca l'esatta combinazione di tasti, che potrebbe essere diversa in ambienti diversi.
Wisbucky

0

Un'alternativa a glob-expand-word (\ Cx *) è insert-completions (\ e *). Funziona senza un asterisco alla fine, ma include anche altri completamenti come i file nascosti. Ho rimbalzato entrambi in ~ / .inputrc:

# insert glob results (\C-x* by default)
"\C-g": glob-expand-word

# insert completion list (\e* by default)
"\ei": insert-completions

glob-complete-word (\ eg) può essere usato per convertire ad esempio /System/Library/Launch*/*Finderin /System/Library/LaunchAgents/com.apple.Finder.plist.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.