Как перенаправить вывод завершения команды?

25

В командной строке я могу перенаправить или направить вывод команды в файл или другую команду, используя оператор >или |после команды. Я столкнулся с менее стандартной ситуацией, когда я хотел бы перенаправить вывод в файл, но у меня, кажется, нет возможности перенаправить его:

Когда на новом терминале,

[chiliNUT ~]$

если я Tabнажимаю, ничего не печатая сначала, меня спрашивают

display all 1725 possibilities? (y or n)

и если я тогда наберу y, я получу хороший длинный список различных команд. Как я могу перенаправить или передать этот вывод в файл? Кажется, я нигде не могу печатать > myfile.txt.

Использование CentOS версии 6.4 (Final) .

chiliNUT
источник

Ответы:

26

Вы можете использовать встроенный 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.

TABв приглашении будут перечислены команды, встроенные функции оболочки, ключевые слова, псевдонимы и функции. Так что вы могли бы сказать:

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

чтобы получить все параметры, которые вы видите при вводе yTABв приглашении оболочки в файл myfile.txt.

Исключите grepконвейер, чтобы получить все возможные команды, функции, ... в файл:

compgen -cbka -A function > myfile.txt
devnull
источник
1
Потрясающе! Вы отвечаете, как написано, на самом деле только захватывает команды / файлы, которые начинаются с буквы y, так что просто compgen -cbka -A function > myfile.txtзахватывает полный вывод. Благодарность! Я (очевидно) никогда не знал об этой новой интересной функции.
chiliNUT
О, это умно.
Хауке Лагинг
@chiliNUT Я упомянул, что команда получит те, с кого начинается y:) Это в значительной степени соответствовало тому, что вы показали в вопросе!
Devnull
О, ха, немного не понял. «У» в моем вопросе на самом деле соответствует «да» против «нет»; Я ввожу 'y', и он выплевывает все эти команды, я ввожу 'n', и он ничего не выводит.
chiliNUT
2
@chiliNUT Я обновил ответ, чтобы отразить это также.
Devnull