2014-01-14 27 views
6

在shell腳本,我們可以將默認輸入使用exec命令如下更改到一個文件:恢復輸出和錯誤到默認值

exec 1>outputfile 

但是,如果在同一個腳本,如果我想恢復標準輸出描述符'1'到默認(終端)。我們如何實現這一目標?

+0

我試過了。沒有工作。 –

+0

這個評論與「tee」有關嗎? – GreenAsJade

+0

No..somebody建議解決方案爲exec>/dev/stdout ...我試過......它沒有奏效......他/她後來刪除了它 –

回答

5

本例

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,那裏有少量的討論和其他相關信息。

+0

你能解釋一下我們從上面的例子中獲取文件描述符'6'嗎? –

+1

正如我在文檔中提到的那樣,shell實際上提供了10個編號的文件描述符用於這種方式,前三個分配給stdin stdout和stderr。它還指出,不使用'5'有一些好的理由,因爲那個是由兒童行爲繼承的。 http://www.tldp.org/LDP/abs/html/io-redirection.html#FTN.AEN17823 – GreenAsJade

+1

好的,我明白了。我們將默認STDOUT存儲在6中,然後從6恢復。這是我一直在尋找的東西。此外,您在評論中提供的鏈接也非常有幫助。謝謝。 –

0

嘗試「三通」的命令:

exec | tee outputfile 

看發球聯機幫助頁解釋相關:

三通 - 從標準輸入讀取和寫入到標準輸出和文件

+0

PLease解釋你的答案。爲你提出這個建議提供一些參考。 –

+0

你的建議是將相同的輸出重定向到STDOUT以及outfile文件。但是,這與將STDOUT恢復爲默認值無關。 –