Что простой метод состоит в том, чтобы вывести вход канала в файл? (Linux)

Метод

consume(String) соответствует интерфейсу Consumer<String>, поскольку он потребляет String - тот факт, что он возвращает значение, не имеет значения, поскольку в этом случае он просто игнорируется. (Поскольку интерфейс Consumer вообще не ожидает никакого возвращаемого значения).

Это должен был быть выбор дизайна и в основном утилита: представьте, сколько методов нужно было бы реорганизовать или продублировать для соответствия потребностям функциональных интерфейсов, таких как Consumer или даже очень распространенных Runnable. (Обратите внимание, что вы можете передать любой метод, который не использует никаких параметров в качестве Runnable для Executor, например.)

Даже такие методы, как java.util.List#add(Object), возвращают значение: boolean. Невозможно передать такой метод ссылок только потому, что они возвращают что-то (что в большинстве случаев не имеет значения во многих случаях) будет довольно раздражать.

6
задан AnFi 9 November 2013 в 18:05
поделиться

11 ответов

Мишень команды Unix делает это.

man tee
24
ответ дан 8 December 2019 в 02:04
поделиться

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

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

echo "hello, world!" > the-file.txt
9
ответ дан 8 December 2019 в 02:04
поделиться
cat > FILENAME
10
ответ дан 8 December 2019 в 02:04
поделиться

Используйте Procmail. Procmail является Вашим другом. Procmail сделан для этого вида вещи.

2
ответ дан 8 December 2019 в 02:04
поделиться

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

5
ответ дан 8 December 2019 в 02:04
поделиться

Если Вы хотите проанализировать его в сценарии:

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

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

1
ответ дан 8 December 2019 в 02:04
поделиться

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

#!/bin/sh
exec cat >/path/to/file
1
ответ дан 8 December 2019 в 02:04
поделиться

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

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

1
ответ дан 8 December 2019 в 02:04
поделиться

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

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

1
ответ дан 8 December 2019 в 02:04
поделиться

Ха? Я предполагаю, я не получаю вопрос?

Не можете Вы только закончить Ваш канал в a >> ~file

Например,

echo "Foobar" >> /home/mo/dumpfile

добавит Foobar к dumpfile (и создаст dumpfile при необходимости). Никакая потребность в сценарии оболочки... Это то, что Вы искали?

0
ответ дан 8 December 2019 в 02:04
поделиться

если Вы не заботитесь о выводе результата

cat - > filename

или

cat > filename
0
ответ дан 8 December 2019 в 02:04
поделиться
Другие вопросы по тегам:

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