Come reindirizzare l'output di completamento del comando?


25

Sulla riga di comando, posso reindirizzare o reindirizzare l'output di un comando a un file o un altro comando utilizzando l' operatore >o |dopo il comando. Mi sono imbattuto in una situazione meno standard in cui vorrei reindirizzare l'output su un file, ma non sembra avere l'opportunità di reindirizzarlo:

Quando in un nuovo terminal,

[chiliNUT ~]$

se premo Tabsenza digitare prima nulla, mi viene chiesto

display all 1725 possibilities? (y or n)

e se poi digito y, ottengo un lungo elenco di comandi diversi. Come posso reindirizzare o reindirizzare questo output su un file? Non ho la possibilità di scrivere da > myfile.txtnessuna parte.

Utilizzo della versione 6.4 di CentOS (Final) .

Risposte:


26

È possibile utilizzare il builtin compgen:

compgen: compgen [-abcdefgjksuv] [-o option]  [-A action] [-G globpat]
[-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix]
[-S suffix] [word]

    Display possible completions depending on the options.

    Intended to be used from within a shell function generating possible
    completions.  If the optional WORD argument is supplied, matches against
    WORD are generated.

    Exit Status:
    Returns success unless an invalid option is supplied or an error occurs.

TABal prompt verrebbero elencati i comandi, i comandi incorporati della shell, le parole chiave, gli alias e le funzioni. Quindi potresti dire:

compgen -cbka -A function | grep '^y' > myfile.txt

per ottenere tutte le opzioni che vedi digitando yTABal prompt della shell nel file myfile.txt.

Elimina la greppipeline per ottenere tutti i possibili comandi, funzioni, ... nel file:

compgen -cbka -A function > myfile.txt

1
Eccezionale! La tua risposta come scritta in realtà prende solo i comandi / file che iniziano con la lettera y, quindi compgen -cbka -A function > myfile.txtprendi solo l'output completo. Grazie! (Ovviamente) non ho mai saputo di questa nuova interessante funzione.
chiliNUT

Oh, è intelligente.
Hauke ​​Laging,

@chiliNUT Ho detto che il comando avrebbe potuto iniziare con quelli y:) Questo era praticamente in linea con quello che hai mostrato nella domanda!
Devnull

Oh, ah, ho frainteso un po '. La "y" nella mia domanda corrisponde in realtà a "sì" vs "no"; Inserisco 'y' e sputa tutti quei comandi, inserisco 'n' e non emette nulla.
chiliNUT

2
@chiliNUT Ho aggiornato la risposta per riflettere anche quello.
Devnull
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.