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


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' повторяется последняя команда.


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

8

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

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

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

set -o history 
set -o histexpand

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.