Набрёл сегодня на мануал по установке 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

Вот и вся магия. Упорото? Аще!

А зачем это нужно?

  • удобно для автоматизации и избежания дублирования ввода;
  • снижает вероятность ошибок, если накосячил в путях.
Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Короче, эта хреновина делает команду более динамичной и минимизирует рукоблудие.

Штука прикольная, как говорится — век живи, век учись.

Ну и с пятницей, друзья! Ещё пару недель — и каникулы.