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


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.