Чи можу я використовувати "!!" у псевдонімах чи сценаріях?


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.