我想將bash
腳本中的printf
的輸出指向stderr
而不是stdout
。我應該使用什麼方法在bash腳本中使用'printf'將錯誤消息寫入'stderr'?
我是不是詢問重定向stderr
或stdout
從哪裏他們目前路由。我只希望能夠將printf
的輸出發送到stderr
而不是默認的stdout
。
我試驗了一下,發現1>&2
附加到printf
,如下面的例子所示,似乎做我想做的。但是,我有沒有使用bash的經驗。所以我的主要的問題是如果有一個「更好」的方式在bash
做到這一點?
作者:「better」我的意思是還有另一種更常用,更常規或更慣用的方法嗎?一個更有經驗的bash程序員如何做到這一點?
#!/bin/bash
printf "{%s} This should go to stderr.\n" "$(date)" 1>&2
printf "[(%s)] This should go to stdout.\n" "$(date)"
我也有一個二次問題。我問的不是很多,因爲我需要需要才能知道,但更多的是因爲我只是好奇而且想更好地瞭解發生的事情。
上面的代碼似乎只能在shell腳本中運行。當我從命令行嘗試它時,它似乎不起作用。
這裏是我的意思的一個例子。
[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
,這反過來應該去到一個文件中。但是這並沒有發生。咦?
是的,事實上,'2> errors.txt 1>&2'就是我應該使用的。事後看來我感到很愚蠢,但這似乎是我必須繼續做出的那些愚蠢的錯誤之一,直到正確的方式對我變得「顯而易見」。 ;-)非常感謝您的洞察力。 –