2014-11-01 109 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来检查它是否适合您。