在shell腳本,我們可以將默認輸入使用exec命令如下更改到一個文件:恢復輸出和錯誤到默認值
exec 1>outputfile
但是,如果在同一個腳本,如果我想恢復標準輸出描述符'1'到默認(終端)。我們如何實現這一目標?
在shell腳本,我們可以將默認輸入使用exec命令如下更改到一個文件:恢復輸出和錯誤到默認值
exec 1>outputfile
但是,如果在同一個腳本,如果我想恢復標準輸出描述符'1'到默認(終端)。我們如何實現這一目標?
本例
Example 20-2. Redirecting stdout using exec
#!/bin/bash
# reassign-stdout.sh
LOGFILE=logfile.txt
exec 6>&1 # Link file descriptor #6 with stdout.
# Saves stdout.
exec > $LOGFILE # stdout replaced with file "logfile.txt".
# ----------------------------------------------------------- #
# All output from commands in this block sent to file $LOGFILE.
echo -n "Logfile: "
date
echo "-------------------------------------"
echo
echo "Output of \"ls -al\" command"
echo
ls -al
echo; echo
echo "Output of \"df\" command"
echo
df
# ----------------------------------------------------------- #
exec 1>&6 6>&- # Restore stdout and close file descriptor #6.
echo
echo "== stdout now restored to default == "
echo
ls -al
echo
exit 0
似乎顯示你想要的。它來自here,那裏有少量的討論和其他相關信息。
你能解釋一下我們從上面的例子中獲取文件描述符'6'嗎? –
正如我在文檔中提到的那樣,shell實際上提供了10個編號的文件描述符用於這種方式,前三個分配給stdin stdout和stderr。它還指出,不使用'5'有一些好的理由,因爲那個是由兒童行爲繼承的。 http://www.tldp.org/LDP/abs/html/io-redirection.html#FTN.AEN17823 – GreenAsJade
好的,我明白了。我們將默認STDOUT存儲在6中,然後從6恢復。這是我一直在尋找的東西。此外,您在評論中提供的鏈接也非常有幫助。謝謝。 –
嘗試「三通」的命令:
exec | tee outputfile
看發球聯機幫助頁解釋相關:
三通 - 從標準輸入讀取和寫入到標準輸出和文件
PLease解釋你的答案。爲你提出這個建議提供一些參考。 –
你的建議是將相同的輸出重定向到STDOUT以及outfile文件。但是,這與將STDOUT恢復爲默認值無關。 –
我試過了。沒有工作。 –
這個評論與「tee」有關嗎? – GreenAsJade
No..somebody建議解決方案爲exec>/dev/stdout ...我試過......它沒有奏效......他/她後來刪除了它 –