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:
- Wprowadzam jakieś polecenie
- 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.
command-line
bash
alias
Ludwig Magnusson
źródło
źródło
fc
polecenia, 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?Odpowiedzi:
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ściCytowanie może jednak stanowić problem w tym podejściu
Bardzo miłą cechą
fc
jest to, że jeśli po prostu uruchomiszfc
polecenie samodzielnie, otworzy się edytor tekstowy określony wFCEDIT
zmiennej (w której prawdopodobnie chcesz przechowywać~/.bashrc
), a zawartość wiersza będzie twoim ostatnim poleceniem. Dla ułatwienia sugeruję korzystanie z niegonano
jako edytora tekstu, ale jeśli wieszvim
- jeszcze lepiej.Na przykład, co jeśli muszę edytować
qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindow
Ogromną linię, prawda? Ale za pomocąfc
mogę otwieraćvim
i edytować/org/ayatana/bamf/matcher
, zapisywać, wychodzić i będzie działać.źródło
Nie możesz użyć,
!!
ale ...Z instrukcji :
źródło
Jeśli nalegasz na użycie
!!
składni ekspansji historii zamiastfc
(jak już wspomniano), istnieje sposób.Domyślnie
history
rozszerzenie 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 histexpand
można też napisaćset -H
.Teraz operacje rozszerzania historii
!!
mogłyby np. Działać w skrypcie.źródło