Сделайте следующее и это сработает
~$whatis `ls /bin`
stty (1) - change and print terminal line settings
stty (2) - unimplemented system calls
su (1) - change user ID or become superuser
etc...
перенаправляю вывод в файл и получаю это?
~$ whatis `ls /bin` > blah
kmod: nothing appropriate.
ntfsck: nothing appropriate.
решение1
>
перенаправляет только стандартный вывод ( stdout
), но когда whatis
не может найти информацию о файле, он записывает ее в другой поток, stderr
. Вы можете перенаправить его также с помощью 2>
так как stderr
это дескриптор файла 2. Вы можете перенаправить как stdout, так и stderr, например &>
, или вы можете перенаправить stderr в stdout, выполнив2>&1
Вы можете прочитать все о перенаправленииздесь
Итак, в вашем примере, если вы хотите, чтобы все ошибки, а также успехи попали blah
в
whatis `ls /bin` &> blah
или, используя альтернативный синтаксис подоболочки, который в настоящее время является предпочтительным:
whatis $(ls /bin) &> blah
хотя /bin
вряд ли он будет, будьте осторожны, делая такие вещи. Результаты ls /bin
будут подвержены разбиению на слова, поэтому если какой-либо из файлов там содержит, скажем, пробелы, они будут рассматриваться как разные аргументы для whatis
. Вот почему вам обычно не рекомендуется анализировать вывод ls
(см.этот вопросдля обсуждения)
Вы могли бы сделать то, что вы пытаетесь сделать по-другому, например
find /bin -maxdepth 1 -type f -exec whatis {} + &> blah
который будет искать внутри /bin
и не углубляться (как glob), затем найдет только файлы ( type f
аргумент) и для каждого найденного объекта выполнит whatis
, а затем выполнит то же самое перенаправление, о котором мы говорили.
решение2
что ищет набор файлов базы данных, содержащих краткие описания системных команд, по ключевым словам и выводит результат на стандартный вывод. Отображаются только полные совпадения слов.
kmod: ничего подходящего. это сообщение говорит о том, что для kmod ничего не найдено.
если вы хотите перенаправить весь вывод, то попробуйте это..
whatis $(ls /bin) > /tmp/a.txt