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

10

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

То, что я хочу иметь, возможно:

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

Если есть решение с использованием сценариев, это также приемлемо.

Людвиг Магнуссон
источник
какова ваша главная цель? добавить больше параметров для последней команды?
Сергей Колодяжный
Нет, моя цель - быстро набрать длинную команду, которую я часто использую. В середине это длинная строка, которая часто является предыдущей командой
Людвиг Магнуссон
кажется, вы хотите просто fcкоманду, чтобы он открывал текстовый редактор, потому что это самый простой способ редактировать длинные команды. Позвольте мне добавить его в свой пост. Также, может быть, вы могли бы привести пример команды?
Сергей Колодяжный
Добавил правку в мой пост
Сергей Колодяжный

Ответы:

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, сохранить, выйти, и он будет работать.

Сергей Колодяжный
источник
9

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

Из руководства :

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

Rinzwind
источник
Так что это позволит мне добавить что-то в начало моей последней команды. Как насчет этого?
Людвиг Магнуссон
8

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

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

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

set -o history 
set -o histexpand

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

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

heemayl
источник