Linux系統(tǒng) shell腳本中可以用STDOUT和STDERR文件描述符以在多個位置生成輸出,只要簡單地重定向相應(yīng)的文件描述符就行了。那么具體如何操作呢?有兩種方法來在腳本中重定向輸出,下面南昌網(wǎng)絡(luò)公司-百恒網(wǎng)絡(luò)就來為大家介紹一下:
一、臨時重定向
如果有意在腳本中生成錯誤消息,可以將單獨的一行輸出重定向到STDERR。你所需要做的是使用輸出重定向符來將輸出信息重定向到STDERR文件描述符。在重定向到文件描述符時,你必須在文件描述符數(shù)字之前加一個&:
echo "This is an error message" >&2
這行會在腳本的STDERR文件描述符所指向的位置顯示文本,而不是通常的STDOUT。下面這個例子就利用了這項功能,我們一起來看看。
$ cat test8
#!/bin/bash
# testing STDERR messages
echo "This is an error" >&2
echo "This is normal output"
$
如果像平常一樣運行這個腳本,你可能看不出什么區(qū)別。
$ ./test8
This is an error
This is normal output
$
記住,默認情況下,Linux會將STDERR導(dǎo)向STDOUT。但是,如果你在運行腳本時重定向了STDERR,腳本中所有導(dǎo)向STDERR的文本都會被重定向。
$ ./test8 2> test9
This is normal output
$ cat test9
This is an error
$
這時通過STDOUT顯示的文本顯示在了屏幕上,而發(fā)送給STDERR的echo語句的文本則被重定向到了輸出文件。
這個方法非常適合在腳本中生成錯誤消息。如果有人用了你的腳本,他們可以像上面的例子中那樣輕松地通過STDERR文件描述符重定向錯誤消息。
二、永久重定向
如果腳本中有大量數(shù)據(jù)需要重定向,那重定向每個echo語句就會很煩瑣。取而代之,你可以用exec命令告訴shell在腳本執(zhí)行期間重定向某個特定文件描述符。
$ cat test10
#!/bin/bash
# redirecting all output to a file
exec 1>testout
echo "This is a test of redirecting all output"
echo "from a script to another file."
echo "without having to redirect every individual line"
$ ./test10
$ cat testout
This is a test of redirecting all output
from a script to another file. without having to redirect every individual line
$
exec命令會啟動一個新shell并將STDOUT文件描述符重定向到文件。腳本中發(fā)給STDOUT的所有輸出會被重定向到文件。
可以在腳本執(zhí)行過程中重定向STDOUT。
$ cat test11
#!/bin/bash
# redirecting output to different locations
exec 2>testerror
echo "This is the start of the script"
echo "now redirecting all output to another location"
exec 1>testout
echo "This output should go to the testout file"
echo "but this should go to the testerror file" >&2
$
$ ./test11
This is the start of the script
now redirecting all output to another location
$ cat testout
This output should go to the testout file
$ cat testerror
but this should go to the testerror file
$
這個腳本用exec命令來將發(fā)給STDERR的輸出重定向到文件testerror。接下來,腳本用 echo語句向STDOUT顯示了幾行文本。隨后再次使用exec命令來將STDOUT重定向到testout文件。注意,盡管STDOUT被重定向了,但你仍然可以將echo語句的輸出發(fā)給STDERR,在本例中還是重定向到testerror文件。
當(dāng)你只想將腳本的部分輸出重定向到其他位置時(如錯誤日志),這個特性用起來非常方便。不過這樣做的話,會碰到一個問題。 一旦重定向了STDOUT或STDERR,就很難再將它們重定向回原來的位置。如果你需要在重定 向中來回切換的話,有個辦法可以用。不過由于時間關(guān)系,今天就先不介紹了,我們下次再給大家講解,敬請關(guān)注!
好了,關(guān)于在腳本中重定向輸出的兩個方法,本公司就已經(jīng)為大家介紹完了,希望能夠?qū)Υ蠹矣兴鶐椭私飧嘞嚓P(guān)知識,歡迎訪問公司官網(wǎng)。此外,百恒網(wǎng)絡(luò)專業(yè)為您提供APP開發(fā)、網(wǎng)站設(shè)計、微信開發(fā)、網(wǎng)站推廣等服務(wù),如有需要,歡迎大家來電咨詢,洽談合作!