Mogę uzyć '!!' w aliasach lub skryptach?


10

W terminalu mogę użyć, !!który będzie odwoływał się do mojego poprzedniego polecenia.
Czy można tego użyć w aliasie? Próbowałem, ale zdarza się, że podwójne wykrzykniki są interpretowane dosłownie.

Chcę, aby możliwe było:

  1. Wprowadzam jakieś polecenie
  2. Wpisuję alias, który będzie zawierał to, co zostało wprowadzone w kroku 1

Jeśli istnieje rozwiązanie wykorzystujące skrypty, jest to również dopuszczalne.


jaki jest twój główny cel? dodać więcej opcji do ostatniego polecenia?
— Sergiy Kolodyazhnyy

Nie moim celem jest szybkie wpisanie długiego polecenia, którego często używam. W środku znajduje się długi ciąg, który często jest poprzednim poleceniem
— Ludwig Magnusson,

wygląda na to, że potrzebujesz tylko fcpolecenia, więc otwiera edytor tekstu, ponieważ jest to najłatwiejszy sposób edytowania długich poleceń. Pozwól mi dodać go do mojego postu. A może mógłbyś podać przykład polecenia?
— Sergiy Kolodyazhnyy

Dodano zmianę do mojego postu
— Sergiy Kolodyazhnyy

Odpowiedzi:


11

Poleceniem wyświetlającym ostatnio wykonane polecenie jest fc -nl -1. Stosując podstawienie wyjściowe, możemy dodać więcej parametrów do tej samej treści

$> ls /etc/passwd
/etc/passwd
$> $(fc -nl -1)  /etc/group                                                     
/etc/group  /etc/passwd
$> 

Cytowanie może jednak stanowić problem w tym podejściu

Bardzo miłą cechą fcjest to, że jeśli po prostu uruchomisz fcpolecenie samodzielnie, otworzy się edytor tekstowy określony w FCEDITzmiennej (w której prawdopodobnie chcesz przechowywać ~/.bashrc), a zawartość wiersza będzie twoim ostatnim poleceniem. Dla ułatwienia sugeruję korzystanie z niego nanojako edytora tekstu, ale jeśli wiesz vim - jeszcze lepiej.

Na przykład, co jeśli muszę edytować qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindowOgromną linię, prawda? Ale za pomocą fcmogę otwierać vimi edytować /org/ayatana/bamf/matcher, zapisywać, wychodzić i będzie działać.


9

Nie możesz użyć, !!ale ...

Z instrukcji :

Przydatnym aliasem używanym z poleceniem fc jest to r='fc -s', że wpisanie „r cc” uruchamia ostatnie polecenie zaczynające się na cc, a wpisanie „r” ponownie uruchamia ostatnie polecenie.


To pozwoli mi dodać coś na początku mojego ostatniego polecenia. A może w środku?
— Ludwig Magnusson,

8

Jeśli nalegasz na użycie !!składni ekspansji historii zamiast fc(jak już wspomniano), istnieje sposób.

Domyślnie historyrozszerzenie jest wyłączone dla nieinteraktywnych sesji powłoki, np. W skryptach.

Aby włączyć rozszerzanie historii w skryptach, najpierw włącz odpowiednie opcje powłoki:

set -o history 
set -o histexpand

set -o histexpandmożna też napisać set -H.

Teraz operacje rozszerzania historii !!mogłyby np. Działać w skrypcie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.