[英]Bash: pipe command output to function as the second argument
在我的bash腳本中,我具有將消息追加到日志文件的功能。 它的用法如下:
addLogEntry (debug|info|warning|error) message
它會生成格式良好的行,並帶有嚴重性指示,時間戳和調用函數名稱。
我一直在尋找一種方法,可以將諸如rm之類的一些標准命令的輸出傳遞給此函數,同時仍可以將嚴重性指定為第一個參數。 我也想同時捕獲stdout和stderr。
不使用變量就可以嗎? 僅僅包含一些變量來記錄一條微不足道的日志消息實在是太過分了,而且它也困擾着代碼。
您有兩種選擇:
您可以在addLogEntry
函數中添加支持,以使其接受來自標准輸入的消息(當未指定message參數或將-
作為消息給出時)。
您可以使用命令替換來運行命令並將其輸出捕獲為函數的參數:
addLogEntry info "$(rm -v .... 2>&1)"
請注意,這將丟失輸出中的所有尾隨換行符(以防萬一)。
您也可以使用xargs完成此操作
$ rm -v ... 2>&1 | xargs -I% addLogEntry info %
info removed 'blah1'
info removed 'blah2'
...
對於此命令, addLogEntry
輸入中的每一行調用addLogEntry
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.