Я хочу направить вывод printf
в bash
script на stderr
вместо stdout
.
Я не, прося о перенаправлении либо stderr
, либо stdout
, откуда они в настоящее время маршрутизируются. Я просто хочу иметь возможность отправлять выходные данные от printf
до stderr
, а не по умолчанию stdout
.
Я немного экспериментировал и обнаружил, что добавление 1>&2
к printf
, как показано в примере ниже, похоже, делает то, что я хочу. Тем не менее, у меня есть нет опыт использования bash. Поэтому мой основной вопрос: есть ли "лучший" способ сделать это в bash
?
Под "лучше" я имею в виду, есть ли другой способ сделать это, которое чаще используется, более условно или более идиоматично? Как мог бы сделать это более опытный программист bash?
#!/bin/bash
printf "{%s} This should go to stderr.\n" "$(date)" 1>&2
printf "[(%s)] This should go to stdout.\n" "$(date)"
У меня также есть вторичный вопрос. Я прошу об этом не так много, потому что мне нужно знать, но больше, потому что мне просто любопытно и хотелось бы лучше понять, что происходит.
Кажется, что выше будет работать, только когда он запускается внутри оболочки script. Кажется, он не работает, когда я пытаюсь выполнить его из командной строки.
Вот пример того, что я имею в виду.
[email protected]:~$ printf "{%s} Sent to stderr.\n" "$(date)" 1>&2 2> errors.txt
{Sat Jun 9 14:08:46 EDT 2012} Sent to stderr.
[email protected]:~$ ls -l errors.txt
-rw-rw-r-- 1 irrational irrational 0 Jun 9 14:39 errors.txt
Я бы ожидал, что команда printf
выше не будет иметь выхода, потому что выход должен перейти к stderr
, который, в свою очередь, должен перейти в файл. Но этого не происходит. А?