2017-01-26 203 views
0

我需要運行像下面提及一些命令,它應該是在屏幕上顯示它執行之前,然後將命令的輸出如何在執行前打印命令?

lsuser -f root|grep -i maxage|awk -F= '{print$2}' 

返回13.

我試圖像如以下變量存儲命令,但它沒有奏效。

mxage="lsuser -f root|grep -i maxage|awk -F= '{print$2}'" 
echo "$maxage" 
echo "`$maxage`" 

輸出應該是這樣:

lsuser -f root|grep -i maxage|awk -F= '{print$2}' 13

+0

想要在_what_之前運行_what_? – Inian

+0

對不起[我作爲副本關閉](http://stackoverflow.com/posts/41876885/revisions)。我只關注問題的最後部分,而這裏的最終目標明顯不同。謝謝@chepner撤消它。 – fedorqui

回答

0

首先,我想簡單地使用set -x,在執行之前其記錄到標準錯誤命令的建議。您可以在完成set +x之後禁用此功能。

set -x 
lsuser -f root|grep -i maxage|awk -F= '{print$2}' 
set +x 

缺點:

  1. 的數據被寫入標準錯誤,而不是標準輸出。 (但在bash的更新版本中,您可以通過設置BASH_XTRACEFD來指定任意文件描述符。)
  2. 也跟蹤set +x的執行情況。

如果你很仔細設置變量的值,你可以使用eval

cmd="lsuser -f root|grep -i maxage|awk -F= '{print\$2}'" 
echo "$cmd" 
eval "$cmd" 

但是,我不推薦這種方法。理論上講,可以正確設置cmd的值,以便它能夠準確記錄並按預期正確執行,但我覺得它比它的價值更麻煩。 (但是,我等待有人展示如何輕鬆完成;我知道它涉及printf%q說明符。)

0

set -x適用於調試腳本。當您只想看到您的原始命令時,請使用

set -v 
lsuser -f root|grep -i maxage|awk -F= '{print$2}' 
set +v