Como redireciono a saída de conclusão do comando?

25

Na linha de comando, posso redirecionar ou canalizar a saída de um comando para um arquivo ou outro comando usando o operador >ou |após o comando. Me deparei com uma situação menos padrão que gostaria de redirecionar a saída para um arquivo, mas não tenho a oportunidade de redirecioná-la:

Quando em um novo terminal,

[chiliNUT ~]$

se eu pressionar Tabsem digitar nada primeiro, me perguntam

display all 1725 possibilities? (y or n)

e se eu digitar y, recebo uma boa lista longa de comandos diferentes. Como redirecionar ou canalizar essa saída para um arquivo? Parece que não tenho a chance de digitar em > myfile.txtnenhum lugar.

Usando o CentOS versão 6.4 (Final) .

chiliNUT
fonte

Respostas:

26

Você pode fazer uso do 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.

TABno prompt listaria comandos, shell embutidos, palavras-chave, aliases e funções. Então você poderia dizer:

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

para obter todas as opções que você vê ao digitar yTABno prompt do shell no arquivo myfile.txt.

Elimine o greppipeline para obter todos os comandos, funções, ... possíveis no arquivo:

compgen -cbka -A function > myfile.txt
devnull
fonte
11
Impressionante! Sua resposta como escrita realmente pega apenas os comandos / arquivos que começam com a letra y, então apenas compgen -cbka -A function > myfile.txtpega a saída completa. Obrigado! Eu (obviamente) nunca soube dessa nova função interessante.
ChiliNUT
Oh, isso é inteligente.
Hauke ​​Laging
@chiliNUT Eu mencionei que o comando faria com que aqueles começassem com y:) Isso estava praticamente alinhado com o que você mostrou na pergunta!
Devnull
Ah, ha, entendi um pouco mal. O 'y' na minha pergunta realmente corresponde a 'yes' vs 'no'; Eu digito 'y' e ele cospe todos esses comandos, eu insiro 'n' e não gera nada.
ChiliNUT
2
@chiliNUT Atualizei a resposta para refletir isso também.
Devnull