Какой простой способ вывести ввод данных из канала в файл? (Linux) - PullRequest
6 голосов
/ 17 сентября 2008

Я ищу небольшой сценарий оболочки, который возьмет все, что передано в него, и поместит его в файл ... для отладки электронной почты. Есть идеи?

Ответы [ 11 ]

24 голосов
/ 17 сентября 2008

Команда teix делает это.

man tee
10 голосов
/ 17 сентября 2008
cat > FILENAME
9 голосов
/ 17 сентября 2008

Вы не одиноки в необходимости чего-то подобного ... на самом деле, кто-то хотел эту функциональность десятилетия назад и разработал tee : -)

Конечно, вы можете перенаправить стандартный вывод непосредственно в файл в любой оболочке, используя символ>:

echo "hello, world!" > the-file.txt
5 голосов
/ 17 сентября 2008

Стандартный тройник инструментов Unix может сделать это. Он копирует ввод в вывод, а также записывает его в файл.

2 голосов
/ 17 сентября 2008

Используйте Procmail. Procmail твой друг. Procmail создан для такого рода вещей.

1 голос
/ 17 сентября 2008

Используйте <<command>> | tee <<file>> для передачи команды <<command>> в файл <<file>>.

Это также покажет вывод.

1 голос
/ 17 сентября 2008

Если exim или sendmail - это то, что пишет в канал, тогда procmail - хороший ответ, потому что он даст вам блокировку / сериализацию файла и вы можете поместить все это в один файл.

Если вы просто хотите записать в файл, то - tee> /tmp/log.$$ или же - cat> /tmp/log.$$ может быть достаточно хорошим.

1 голос
/ 17 сентября 2008

Если вы хотите сценарий оболочки, попробуйте это:

#!/bin/sh
exec cat >/path/to/file
1 голос
/ 17 сентября 2008

Если вы хотите проанализировать это в скрипте:

while /bin/true; do
    read LINE
    echo $LINE > $OUTPUT
done

Но вы можете просто использовать кошку. Если cat получает что-то на stdin, он выводит его на stdout, поэтому вам нужно будет передать это cat> $ OUTPUT Они будут делать то же самое. Второй работает и для двоичных данных.

0 голосов
/ 17 сентября 2008

, если вы не хотите выводить результат

cat - > filename

или

cat > filename
...