2014-11-01 110 views
0

現在我想在freeBSD中記錄所有用戶的登錄消息,所以我在freeBSD中鍵入last -f /var/log/utx.log來查看日誌。如何在將命令輸出分配給csh中的變量後保留命令輸出的格式?

輸出格式爲: brandboat pts/1 xxx.xxx.xxx.xxx Sat Nov 1 11:28 still logged in brandboat pts/0 xxx.xxx.xxx.xxx Sat Nov 1 11:21 still logged in root ttyv0 Sat Nov 1 11:16 still logged in brandboat pts/1 xxx.xxx.xxx.xxx Sat Nov 1 11:11 - 11:25 (00:13)

我嘗試在所有這些消息複製到一個變量: set aaa= `last -f /var/log/utx.log` echo $aaa

輸出爲:

brandboat pts/1 xxx.xxx.xxx.xxx Sat Nov 1 11:28 still logged in brandboat pts/0 xxx.xxx.xxx.xxx Sat Nov 1 11:21 still logged in root ttyv0 Sat Nov 1 11:16 still logged in brandboat pts/1 xxx.xxx.xxx.xxx Sat Nov 1 11:11 - 11:25 (00:13)

正如你可以看到,它不會保留命令輸出中的原始格式。我如何保存在csh

回答

0

這是黑魔法,但它的工作原理:

$ csh 
% set g=`ls | sed -s ':a;N;$\\!ba;s/\n/\\n/g'` 
% echo "$g" 
% /bin/echo -e "$g" 

的想法是通過使用sed\n改變換行符。我用這個trick來得到它。請注意,我必須加倍逃生標籤!ba以告訴csh它不是一個事件。

您可以用last -f /var/log/utx.log代替ls來檢查它是否適合您。