2016-07-28 48 views
0

我知道EXEC是在當前進程中執行的程序從here無法理解在bash腳本結合exec和重定向

EXEC引述倒在當前進程替換當前的程序,而無需 派生一個新的進程。這不是您在編寫的每個 腳本中都會使用的內容,但它偶爾派上用場。

我正在看一個bash腳本,我無法準確理解這一行。

#!/bin/bash 
LOG="log.txt" 
exec &> >(tee -a "$LOG") 
echo Logging output to "$LOG" 

在這裏,exec沒有任何程序名稱可以運行。這是什麼意思?它似乎在捕獲執行輸出到日誌文件。我會明白,如果它是exec program |& tee log.txt但在這裏,我不明白exec &> >(tee -a log.txt)。爲什麼另一個>&>
這條線的含義是什麼? (我知道 - 一個選項是追加和&>是重定向,包括標準錯誤)

編輯:我選擇瞭解決方案後,我發現exec &> >(tee -a "$LOG")工程時,它是bash shell(而不是sh)。所以我將最初的#!/bin/sh修改爲#!/bin/bash。但exec &>> "$LOG"適用於bash和sh。

+0

您的系統是否安裝了bash手冊頁?啓動它並搜索「exec」(exec後跟一個空格)。 – Jens

回答

3

man bash來自:

EXEC [-Cl] [-a名] [命令[參數]]

如果未指定命令,任何重定向採取在 當前殼效應,[ ...]

而其餘的:

&>  # redirects stdout and stderr 
>(cmd) # redirects to a process 

process substitution

+0

你能解釋一下這個例子嗎? – sjsam

+0

您正在重定向當前shell的輸出。 –

+0

謝謝。很好的解釋。 – sjsam