Я хочу определить глобальный псевдоним, который печатает одну строку.

alias -g TLOGS3="\`find /var/log/trafficserver/ -name access.log\* -printf \"%T@ %Tc %p\n\" | sort -n | tail -n 3 | cut -d \" \" -f 9 | tr \"\n\" \" \"\`"

Я хочу напечатать это:-

`find /var/log/trafficserver/ -name access.log\* -printf "%T@ %Tc %p\n" | sort -n | tail -n 3 | cut -d " " -f 9 | tr "\n" " "`

Но по какой-то причине, когда я печатаю (TLOGS3 и пробел) в терминале (оболочка zsh), я получаю следующее:

➜ $?=0 /home/arastogi [10:37AM] % TLOGS3find: `/var/log/trafficserver/': No such file or directory
`find /var/log/trafficserver/ -name access.log\* -printf "%T@ %Tc %p\n" | sort -n | tail -n 3 | cut -d " " -f 9 | tr "\n" " "`

Может ли кто-нибудь помочь мне относительно того, что происходит?

1 ответ1

0

Из сообщения об ошибке может показаться, что каталог /var/log/trafficserver/ не существует или, по крайней мере, find не может получить к нему доступ.

И я предполагаю, что сообщение об ошибке появляется после ввода пробела, потому что пробел связан с виджетом, который автоматически пытается расширить псевдонимы. Если ваш псевдоним обычно заменяется их полной командой, то это определенно так. В противном случае вы можете проверить это с

bindkey " "

Если виджет не связан с Space, это должно отобразиться

" " self-insert

Это также может показать

" " magic-space

Это внутренний виджет, который расширяет ссылки на историю (например, !!) прежде чем также вставить пробел. Но это не влияет на псевдонимы.

Если он показывает что-то еще, это, скорее всего, виджет, который расширяет псевдоним. Конечно, основная проблема заключается в том, что каталог не существует или недоступен.


Кроме того, псевдоним, кажется, в порядке и работает для меня, хотя мне пришлось изменить -f 9 на -f 8 , так как find возвращает только восемь полей для меня, вероятно, из-за различных настроек локали. Но я бы посоветовал использовать глобальные квалификаторы zsh для достижения того же результата менее сложным способом:

alias -g TLOGS3='/var/log/trafficserver/**/access.log*(Om[-3, -1])'

Это расширяется до списка файлов в /var/log/trafficserver или в любом из его подкаталогов (**), соответствующих имени access.log* . Этот список упорядочен по убыванию (O) по времени модификации (m ; последняя модификация - первая) и ограничен третьим последним элементом ([-3,-1]).

Если нет подкаталогов и порядок файлов можно изменить, это можно сократить до

alias -g TLOGS3='/var/log/trafficserver/access.log*(om[1,3])'

o порядки по возрастанию, так что элементы с первого по третий являются тремя самыми новыми.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .