Terminal Linux (np. Ubuntu), czy istnieje metoda uzyskania ostatniej linii? Powiedzmy, że losowo wpisuję td
polecenie, które nie zostało zainstalowane w moim systemie, więc otrzymam komunikat podobny do poniższego. Chciałbym mieć „skrót” do sudo apt-get install textdraw
szybkiego uruchamiania .
Czy istnieje takie narzędzie lub jak mogę skopiować ostatni wiersz do schowka bez użycia myszy?
username@WorkStation:~$ td
The program 'td' is currently not installed. You can install it by typing:
sudo apt-get install textdraw
username@WorkStation:~$
sudo apt-get install textdraw
, nietd
. strzałka w górę da mi tylkotd
Odpowiedzi:
Jeśli nie przeszkadza ci trochę nieprzyzwoitości (ja nie), możesz chcieć skorzystać z kurwa , narzędzia, które robi dokładnie to, o co prosiłeś.
Nie do końca, ale rozwiązuje ten sam problem. Zamiast pobrać najnowszą linię, próbuje dopasować ostatnie wpisane polecenie.
Przykłady przedstawione w repozytorium pokazują kilka wspomnianych scenariuszy.
źródło
Krótka odpowiedź: nie, prawdopodobnie nie masz dostępnej metody, aby to zrobić.
Długa odpowiedź:
vi
(gdzie wynik nie jest ładnym tekstem zorientowanym liniowo). Bash i tak tego nie robi.W praktyce ludzie robią, aby obejść to ograniczenie, używając innych programów do przechwytywania danych wyjściowych poleceń i ich edycji. Ale to nie rozwiąże twojego bezpośredniego problemu.
Na przykład używam vi-like-emacs do wydawania poleceń powłoki ad hoc. Jeśli nie wymagają one dalszych danych wejściowych, dobrze jest uruchomić je w oknie , przechwytując dane wyjściowe polecenia - i edytując dane wyjściowe w razie potrzeby w celu udoskonalenia polecenia. Emacs pozwala także na zrobienie czegoś takiego, a także na vim.
źródło
Jeśli dostałeś ten komunikat w Ubuntu po uruchomieniu nieistniejącej komendy z bash, twój system prawdopodobnie używa
command_not_found_handle
funkcji. Możesz to zobaczyć w/etc/bash.bashrc
.Może być trywialne hakowanie: Właśnie utworzyłem skrypt o nazwie
cnfh
:Następnie uruchom polecenie td za pomocą tego skryptu:
Korzystanie z Ubuntu 14.04.2 LTS . Mam nadzieję że to pomogło.
źródło
W tmux v2.4 i nowszych (od tego momentu https://github.com/tmux/tmux/commit/76d6d3641f271be1756e41494960d96714e7ee58 ) z
send-keys -X
. Może to być możliwe w starszych wersjach, z inną składnią.W
.tmux.conf
:Teraz
prefix+!
skopiuje ostatni wiersz w bieżącej pozycji kursora.cursor-left
można pominąć, jeśli chcesz wykonać go bezpośrednio bez wpisywania return.Uwaga : nie będzie działać, jeśli ostatni wiersz jest pusty lub jeśli jest zawinięty, ale nadal jest przydatny w większości przypadków
źródło
Aby wykonać ostatni wiersz wyniku ostatniego polecenia, jeśli chcesz ponownie wykonać to polecenie (ponieważ nie wykonało ono nic oprócz wydania komunikatu diagnostycznego), wykonaj
Krok po kroku (warstwa po warstwie):
fc
(co może oznaczać „Napraw polecenie”) to wbudowane polecenie powłoki umożliwiające dostęp do historii poleceń.-ln
l
(małe litery L) - l Zestawienie poprzednie polecenie (S)n
- nie obejmuje polecenia n Umbry1
(jeden) - odnosi się do najnowszego poleceniafc -ln -1
wyświetla najnowsze polecenie, bez numeru polecenia.$(fc -ln -1)
wykonuje ostatnie polecenie.$(fc -ln -1) | tail -n 1
wykonuje ostatnie polecenie i wyświetla ostatni wiersz wyniku. To jestsudo apt-get install textdraw
linia w twoim przykładzie.$($(fc -ln -1) | tail -n 1)
wykonuje to polecenie.Możesz to zmienić na:
Wybieram krótszą nazwę dla aliasu.
Uwagi:
|
,<
,>
,;
,&
, a nawet cytaty. Jeśli potrzebujesz obsługiwać złożone polecenia, prawdopodobnie możesz to zrobić, dodająceval
, ale nie jest to zalecane.tail -n 17 | head -n 1
.fc
. Zauważ, żefc -ln -1
to skrótfc -ln -1 -1
. Aby pobrać trzecie ostatnie polecenie, użyjfc -ln -3 -3
.źródło