Я хочу направить вывод printf
в сценарии bash
на 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)"
У меня также есть второстепенныйвопрос. Я спрашиваю не столько потому, что мне нужнознать, сколько потому, что мне просто любопытно и я хотел бы лучше понять, что происходит.
Кажется, вышеописанное будет работать только тогда, когда оно запускается внутри скрипта оболочки. Кажется, это не работает, когда я пытаюсь это сделать из командной строки.
Вот пример того, что я имею в виду.
irrational@VBx64:~$ printf "{%s} Sent to stderr.\n" "$(date)" 1>&2 2> errors.txt
{Sat Jun 9 14:08:46 EDT 2012} Sent to stderr.
irrational@VBx64:~$ ls -l errors.txt
-rw-rw-r-- 1 irrational irrational 0 Jun 9 14:39 errors.txt
Я ожидаю, что команда printf
выше не будет иметь вывода, потому что вывод должен идти на stderr
, который, в свою очередь, должен идти в файл. Но этого не происходит. А?