Набрёл сегодня на мануал по установке ack, а там такое:
curl https://beyondgrep.com/ack-2.28-single-file > ~/bin/ack && chmod 0755 !#:3
В строке в конце есть непонятности: !#:3.
Опять какая-то магия, а магию мы с тобой любим.
Давай разберёмся.
В данном случае !#:3 — это конструкция, связанная с историей команд в оболочке Bash/Zsh.
! используется для доступа к истории команд.
Например, !! повторит последнюю команду, а !123 выполнит команду с номером 123 в истории.
# ссылается на текущую команду, которая в данный момент пишется.
Вместо доступа к уже выполненной команде из истории мы ссылаемся на текст текущей строки.
:3 указывает, что нужно взять третий аргумент в текущей строке.
Соответственно:
Как это работает?
Сначала выполняется команда curl, которая скачает файл ack-2.28-single-file и сохранит его в ~/bin/ack.
После этого команда chmod изменяет права доступа для файла.
А !#:3 подставляет третий аргумент текущей команды, то есть ~/bin/ack.
И по итогу команда превращается в chmod 0755 ~/bin/ack:
curl http://beyondgrep.com/ack-2.28-single-file > ~/bin/ack && chmod 0755 ~/bin/ack
Вот и вся магия. Упорото? Аще!
А зачем это нужно?
- удобно для автоматизации и избежания дублирования ввода;
- снижает вероятность ошибок, если накосячил в путях.
Штука прикольная, как говорится — век живи, век учись.
Ну и с пятницей, друзья! Ещё пару недель — и каникулы.








Комментарии