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

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

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

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

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

10
задан 19 July 2016 в 06:53

3 ответа

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

От руководство :

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

9
ответ дан 23 November 2019 в 04:18

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

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

Для включения расширения истории в сценариях включают соответствующие опции оболочки сначала:

set -o history 
set -o histexpand

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

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

8
ответ дан 23 November 2019 в 04:18

Команда, которая перечисляет последнюю выполняемую команду, 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 , сохраните, выход, и он будет работать.

11
ответ дан 23 November 2019 в 04:18

Другие вопросы по тегам:

Похожие вопросы: