Какой простой способ сбросить входные данные канала в файл?(Linux)
Вопрос
Я ищу небольшой скрипт оболочки, который возьмет все, что в него вложено, и сбросит это в файл..для целей отладки электронной почты.Есть какие-нибудь идеи?
Решение
Команда unix tee делает это.
man tee
Другие советы
cat > FILENAME
Вы не одиноки в том, что нуждаетесь в чем-то подобном...на самом деле, кто-то хотел эту функциональность несколько десятилетий назад и разработал тройник :-)
Конечно, вы можете перенаправить стандартный вывод непосредственно в файл в любой командной строке, используя символ >:
echo "hello, world!" > the-file.txt
Стандартный инструмент unix tee может это сделать.Он копирует входные данные в выходные, одновременно записывая их в файл.
Используйте Procmail.Procmail - ваш друг.Procmail создан для подобных вещей.
Если вы хотите проанализировать это в скрипте:
while /bin/true; do
read LINE
echo $LINE > $OUTPUT
done
Но вы можете просто использовать cat.Если cat получит что-то из stdin, оно передаст это в стандартный вывод, так что вам придется передать это в cat >$OUTPUT.Они будут делать то же самое.Второй способ работает и для двоичных данных.
Если вам нужен сценарий командной строки, попробуйте это:
#!/bin/sh
exec cat >/path/to/file
Если exim или sendmail - это то, что записывается в канал, то procmail - хороший ответ, потому что он обеспечит вам блокировку / сериализацию файлов, и вы сможете поместить все это в один файл.
Если вы просто хотите записать данные в файл, то - tee > /tmp/log.$$ или - cat > /tmp/log.$$ может быть достаточно.
Использование <<command>> | tee <<file>>
для передачи команды по каналу <<command>>
в файл <<file>>
.
Это также покажет результат.
А?Наверное, я не понял вопроса?
Разве ты не можешь просто засунуть свою трубку в >> ~file
Например
echo "Foobar" >> /home/mo/dumpfile
добавит Foobar к файлу дампа (и создаст файл дампа, если необходимо).Нет необходимости в сценарии оболочки...Это то, что вы искали?
если вы не заботитесь о выводе результата
cat - > filename
или
cat > filename