簡體   English   中英

Bash:管道命令輸出用作第二個參數

[英]Bash: pipe command output to function as the second argument

在我的bash腳本中,我具有將消息追加到日志文件的功能。 它的用法如下:

addLogEntry (debug|info|warning|error) message

它會生成格式良好的行,並帶有嚴重性指示,時間戳和調用函數名稱。

我一直在尋找一種方法,可以將諸如rm之類的一些標准命令的輸出傳遞給此函數,同時仍可以將嚴重性指定為第一個參數。 我也想同時捕獲stdout和stderr。

不使用變量就可以嗎? 僅僅包含一些變量來記錄一條微不足道的日志消息實在是太過分了,而且它也困擾着代碼。

您有兩種選擇:

  1. 您可以在addLogEntry函數中添加支持,以使其接受來自標准輸入的消息(當未指定message參數或將-作為消息給出時)。

  2. 您可以使用命令替換來運行命令並將其輸出捕獲為函數的參數:

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM