Неоднозначное перенаправление при перенаправлении на несколько файлов с помощью Bash - PullRequest
9 голосов
/ 22 декабря 2010
$ echo "" >  /home/jem/rep_0[1-3]/logs/SystemOut.log
bash: /home/jem/rep_0[1-3]/logs/SystemOut.log: ambiguous redirect

Можно ли перенаправить одновременно несколько файлов?

Редактировать: Любой ответ, позволяющий использовать неоднозначную ссылку на файл?

Ответы [ 6 ]

21 голосов
/ 22 декабря 2010

Для этого используется тройник:

command | tee file1 file2 file3 > file4

тройник также выводит на стандартный вывод, поэтому вы можете захотеть либо поместить один файл после перенаправления (как показано выше), либо отправить стандартный вывод на /dev/null.

Для вашего случая:

echo "" | tee /home/jem/rep_0[1-3]/logs/SystemOut.log >/dev/null
5 голосов
/ 22 декабря 2010

Вы можете сделать это, используя tee, который читает из стандартного ввода и записывает в стандартный вывод и файлы. Поскольку tee также выводит на стандартный вывод, я решил направить его вывод на /dev/null. Обратите внимание, что расширение bash совпадает с существующими файлами, поэтому файлы, к которым вы пытаетесь записать, должны существовать до выполнения этой команды, чтобы она работала.

$ echo "" | tee /home/jem/rep_0[1-3]/logs/SystemOut.log > /dev/null

Как примечание: "", который вы передаете echo, является избыточным.

Не имеет прямого отношения к вашему вопросу, но если вы не полагаетесь на расширение bash, у вас может быть несколько каналов.

$ echo hello > foo > bar > baz
$ cat foo bar baz
hello
hello
hello
3 голосов
/ 21 апреля 2011

У меня был тот же вопрос, и я просто хотел добавить пример с подстановочным знаком, поскольку он не был показан. Я думаю, это то, что вы искали:

echo "" | tee *.log
1 голос
/ 22 декабря 2010

Вы можете сделать это:

echo "" | tee /home/jem/rep_0{1..3}/logs/SystemOut.log

Чтобы подавить вывод в stdout, добавьте это в конец приведенных выше команд:

> /dev/null

Команда echo в вашем вопросе (которая не требует пустых кавычек) просто помещает новую строку в файлы. Если вы хотите создать пустые файлы, используйте команду touch.

0 голосов
/ 22 декабря 2010

Передайте команду "tee" для перехода к файлу и стандартному выводу, каскад команд tee

0 голосов
/ 22 декабря 2010

Нет. Как насчет использования tee дважды?

echo "Your text" | tee file1 | tee file2 > file3
...