Предположим, у меня есть список команд в текстовом файле, как показано ниже (cat cmdlist.txt
): -
cut
lshw
top
awk
sensors
Теперь я хочу получить простую информацию об этой команде с помощью whatis cut
, whatis lshw
и т. Д. соответственно и распечатайте эти выходные данные whatis <commadnd>
в текстовом файле, скажем cmdinfo.txt
Желаемый выходной сигнал cmdinfo.txt
(cat cmdinfo.txt
): -
cut (1) - remove sections from each line of files
lshw (1) - list hardware
top (1) - display Linux processes
awk (1) - pattern scanning and text processing language
sensors (1) - print sensors information
Как получить файл cmdinfo.txt
с выводом whatis
для команд из cmdlist.txt
соответственно?
Это только примеры текстовых файлов.
Предложите простой сценарий, если необходимо.
Максимально простой:
xargs whatis < cmdlist.txt > cmdinfo.txt
Намного более простой один,
$ while read -r line; do whatis "$line"; done < cmdlist.txt > cmdinfo.txt
cut (1) - remove sections from each line of files
lshw (1) - list hardware
top (1) - display Linux processes
awk (1) - pattern scanning and text processing language
sensors (1) - print sensors information
Использование ниже команды для записи результата в файл.
while read -r line; do whatis "$line"; done < cmdlist.txt > cmdinfo.txt
Что-то вроде этого:
#! /bin/bash
in_file=$1
out_file=$2
while read command
do
whatis $command
done < $in_file >> $out_file
я принял решение уехать stderr
нетронутый, с тех пор если у Вас есть команда там, для которой whatis
информация не доступна, Вы должны быть сделаны знающий о том (и посмотреть в другом месте, в случае необходимости).
Очень просто:
for i in $(cat cmdlist.txt); do whatis $i ; done > cmdinfo.txt
Это циклично выполняется посредством каждой записи (i
) в выводе $(cat cmdlist.txt)
и работает whatis
на очень записи. Пример произвел:
cut (1) - remove sections from each line of files
lshw (1) - list hardware
top (1) - display Linux processes
awk (1) - pattern scanning and processing language
sensors (1) - print sensors information
N.B. даже при том, что во многих примерах Вы найдете i
используемый, Вы не должны использовать его - можно использовать самые простые алфавитно-цифровые строки - например:
for jnka127nsdn in $(cat input.txt); do whatis $jnka127nsdn ; done
, Чтобы сделать это, не анализируя cat
:
while read -r i ; do whatis $i ; done < cmdlist.txt
Я думаю, что можно получить правильно результат со следующей командой.
$ for i in `cat cmdlist.txt`;do whatis $i 2>&1;done | sed "s,: nothing appropriate.,,g" > cmdinfo.txt
Действительно,
$ for i in `cat cmdlist.txt`;do whatis $i 2>&1;done
Команда, одна часть первой команды покажет выводы после.
cut (1) - remove sections from each line of files
lshw (1) - list hardware
top (1) - display Linux tasks
.: nothing appropriate.
.: nothing appropriate.
.: nothing appropriate.
tr (1) - translate or delete characters
можно сделать это с whatis $(cat cmdlist.txt)
, но это производится, включает следующие строки.
.: nothing appropriate.
.: nothing appropriate.
.: nothing appropriate.
выше sed
команда удаляет некоторые выходные строки Вы бесполезный.
Вопрос изменяется как теперь. Если все строки cmdlist.txt
может быть перечислен от whatis
, Может использовать следующую команду в качестве простого пути.
whatis `cat 1.txt` 2>/dev/null > cmdinfo.txt
Если Вам просто нужны строки, которые могут быть полностью перечислены от whatis
, Может использовать следующую команду в качестве simpleway.
whatis `cat 1.txt` > cmdinfo.txt
Однако можно выбрать один способ различных.