Могу ли я использовать '!!' в псевдонимах или сценариях?

10

В терминале я могу использовать !! , который будет ссылаться на мою предыдущую команду.
Можно ли использовать это в псевдониме? Я пробовал это, но происходит то, что двойные восклицательные знаки интерпретируются буквально.

Я хочу иметь возможность:

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

Если есть решение, использующее сценарии, которые также приемлемы.     

задан Ludwig Magnusson 19.07.2016 в 11:48
источник

3 ответа

11

Команда, которая отображает последнюю выполненную команду, - fc -nl -1 . Используя выходную подстановку, мы можем добавить больше параметров к одному и тому же контенту

$> ls /etc/passwd
/etc/passwd
$> $(fc -nl -1)  /etc/group                                                     
/etc/group  /etc/passwd
$> 

Цитата, однако, может быть проблемой при таком подходе

Очень приятная функция fc заключается в том, что если вы просто запустите команду fc , она откроет текстовый редактор, указанный в переменной FCEDIT (которую вы, вероятно, захотите сохранить в ~/.bashrc ), и содержимое строка будет вашей последней командой. Для вашей удобства я предлагаю вам использовать nano в качестве текстового редактора, но если вы знаете, что vim - еще лучше.

Например, что делать, если мне нужно отредактировать qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindow Огромная строка, не так ли? Но с fc я могу открыть vim и отредактировать /org/ayatana/bamf/matcher , сохранить, выйти и запустить.

    
ответ дан Sergiy Kolodyazhnyy 19.07.2016 в 12:26
9

Вы не можете использовать !! , но ...

В руководстве :

  

Полезным псевдонимом для использования с командой fc является r='fc -s' , поэтому при вводе 'r cc' выполняется последняя команда, начинающаяся с cc , и вводя 'r' повторно выполняет последнюю команду.

    
ответ дан Rinzwind 19.07.2016 в 12:03
8

Если вы настаиваете на использовании синтаксиса расширения !! history вместо fc (уже упоминалось), существует способ.

По умолчанию расширение history отключено для неинтерактивных сеансов оболочки, например. в скриптах.

Чтобы включить расширение истории в сценариях, сначала включите соответствующие параметры оболочки:

set -o history 
set -o histexpand

set -o histexpand также может быть записано как set -H .

Теперь операции расширения истории, например. !! будет работать внутри скрипта.

    
ответ дан heemayl 19.07.2016 в 16:16