Оболочка для чтения файла построчно

Допустим, у меня есть файл (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 может быть значительно более безопасным, чем просто выполнение какой-либо команды в файле. Но это, очевидно, зависит от того, что находится в вашем реальном файле данных.

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