Сегодня один из читателей задал вопрос про восклицательный знак в составе команды запуска. Он ошибочно посчитал его признаком повышения прав и признался, что так и не смог найти подробного описания использования этого спецсимвола.
Поэтому попробуем заполнить этот пробел. Восклицательный знак используется для повторения команд и аргументов команд. В самом простейшем виде наберите:
!! И оболочка повторит последнюю набранную команду. Это удобно, если команда требует повышения прав, тогда вместо перепечатывания команды заново достаточно написать:
sudo !!Немного сложнее, если команду надо было выполнить от другого пользователя, например, postgres:
su -c “!!” postgresТакже с помощью восклицательного знака легко повторить команду из истории, выполните
history
Посмотрите номер нужной команды и введите:
!38
Что заново выполнит команду из истории под номером 38.
Также мы можем повторить выполнение команды со всеми аргументами, допустим мы выполнили:
cat /home/andrey/123.txt /home/ivan/321.txtДля ее повторения достаточно выполнить:
!cat
или вообще
!с
Достаточно ввести одну или несколько букв, которые однозначно могут определить команду в текущей сессии.
Мы можем не только повторить, но и добавить аргументы, например:
!cat /home/andrey/456.txtЧто будет эквивалентно
cat /home/andrey/123.txt /home/ivan/321.txt /home/andrey/456.txtТакже можно использовать восклицательный знак для передачи аргументов предыдущей команды.
Для первого и последнего используйте
!^ и !$Так после выполнения последней команды мы можем указать:
cat !^ !$
Что приведет к выполнению:
cat /home/andrey/123.txt /home/andrey/456.txt
Либо можем указать аргументы явно, для последней команды можем использовать
!:2 – второй аргумент, или указать команду явно, тогда будет использован указанный аргумент последнего запуска команды:cat !cat:2Будет аналогичен:
cat /home/andrey/456.txtОбратите внимание, что к аргументам также относятся и ключи, поэтому если после запуска
cat -n /home/andrey/456.txtВы введете:
cat -n !^ То будет выполнен:
cat -n -n без аргументов.