Требуется простой скрипт / цикл / команда для ввода команды, выполнения и вывода в текстовых файлах

Другой вариант:

tail -f your_file

Он покажет вам последние десять строк в your_file. Если процесс добавляет что-то в этот файл, вы видите его на своем терминале. man tail дает вам больше информации о tail.

Полезно узнать, что происходит с сервером при использовании этой команды в файле журнала.

Нажмите Ctrl-C, чтобы выйти когда вы закончите просмотр.

1
задан 14 July 2014 в 17:28

4 ответа

Гораздо проще,

$ 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
5
ответ дан 24 May 2018 в 05:42
  • 1
    не анализируйте вывод команды cat. – Avinash Raj 13 July 2014 в 16:14
  • 2
    Я тестировал его на lubuntu 12.04, и он отлично работает. Также работает ваша более простая версия. Может быть, я не понимаю ваш комментарий :) – Lety 13 July 2014 в 16:19
  • 3
    @Leiizia, что вы сделали, это cat file | awk '{print $1}', что я сделал awk '{print $1}' file. Я думаю, вы понимаете из этого. – Avinash Raj 13 July 2014 в 16:22
  • 4
  • 5
    Извините, я не использую awk в своем ответе, где вы его нашли? – Lety 13 July 2014 в 16:26

Очень просто:

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
3
ответ дан 24 May 2018 в 05:42

Что-то вроде этого:

#! /bin/bash
in_file=$1
out_file=$2

while read command
do
    whatis $command 
done < $in_file >> $out_file

Я решил оставить stderr нетронутым, так как если у вас есть команда там, для которой whatis информация недоступна, вы должны быть осведомлены (и посмотрите в другом месте, если необходимо).

2
ответ дан 24 May 2018 в 05:42

Я думаю, что вы можете получить правильный результат с помощью следующей команды.

$ 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 команда удаляет некоторые выходные строки, которые вам понадобятся. [ ! d4]

Вопрос изменяется как сейчас. Если все строки из cmdlist.txt могут быть перечислены в whatis, можно использовать следующую команду как простой способ.

whatis `cat 1.txt` 2>/dev/null > cmdinfo.txt

Если вам просто нужны строки, которые могут быть полностью перечислены из , Может использовать следующую команду в качестве простого пути.

whatis `cat 1.txt` > cmdinfo.txt

Вопрос вы можете выбрать один из способов для разных.

2
ответ дан 24 May 2018 в 05:42
  • 1
    Странный. Поскольку строка «ничего подходящего» не печатается на stderr, почему вы должны направить stderr на stdin, а затем удалить его? Лучше простого перенаправления stderr на /dev/null? – muru 13 July 2014 в 14:42
  • 2
    хорошо, пожалуйста, снова прочитайте его вопрос. – xiaodongjie 13 July 2014 в 14:45
  • 3
    Он требует обработки ". & Quot; строка в его примерном тексте. – xiaodongjie 13 July 2014 в 14:46
  • 4
    Я понял, что точки - эллипсис . Тем не менее, вы можете заменить команду: whatis $i 2>/dev/null >> cmd.txt. Нет необходимости в sed. – muru 13 July 2014 в 14:49
  • 5
    muru, ладно, я уже думал, что это простой способ, но он удаляет " " линия. – xiaodongjie 13 July 2014 в 14:53

Другие вопросы по тегам:

Похожие вопросы: