Как сохранить формат вывода команды после ее присвоения переменной в csh?

Теперь я хочу записывать все сообщения пользователя во freeBSD, поэтому я набираю last -f /var/log/utx.log во freeBSD, чтобы просмотреть журнал.

Выходной формат: 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?


person brandboat    schedule 01.11.2014    source источник


Ответы (1)


Это черная магия, но она работает:

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

Идея состоит в том, чтобы изменить символы новой строки на \n с помощью sed. Я использовал этот трюк, чтобы получить его. Обратите внимание, что мне пришлось дважды использовать escape-метку !ba, чтобы сообщить csh, что это не событие.

Вы можете заменить ls на last -f /var/log/utx.log, чтобы проверить, работает ли это для вас.

person Edouard Thiel    schedule 01.11.2014