Оболочка для чтения файла построчно
Допустим, у меня есть файл (Input.txt
) с некоторыми следующими командами копания.
dig NS google.com
dig NS box.com
dig NS dropbox.com
dig NS cnn.com
dig NS bbc.co.uk
Я хочу выполнить команды копать только из файла и который должен быть прочитан построчно.
В настоящее время я пытался использовать
for i in $(cat Input.txt);do $i;done
Я не уверен, как это может быть выполнено, и я получаю следующее сообщение как команда не найдена.
Любые предложения, пожалуйста, по решению этой проблемы?
3 ответа
Пытаться:
. Input.txt
Точка, сопровождаемая пробелом и именем файла, будет выполнять каждую строку в файле.
Ваш for
Цикл не работает, потому что он разделяет ввод по слову, а не по строке. Поэтому он пытается выполнить команду google.com
Например, отсюда сообщения "команда не найдена".
Вы можете создать файл.sh и разместить команды, перенаправляющие выходные данные, например:
#!/bin/bash
dig NS google.com >> ~/google.log
dig NS box.com >> ~/box.log
dig NS dropbox.com
dig NS cnn.com
dig NS bbc.co.uk
Вы ищете eval
ключевое слово. Итак, с вашим общим примером:
cat Input.txt | while read i;do eval $i;done
Лично я был бы склонен предположить, что лучший способ сделать это - это иметь свой список доменов и сделать что-то вроде:
xargs -n 1 -a /file/with/domains dig NS
В зависимости от вашего источника данных решение xargs может быть значительно более безопасным, чем просто выполнение какой-либо команды в файле. Но это, очевидно, зависит от того, что находится в вашем реальном файле данных.