Jak skopiować wcześniej wprowadzone polecenie za pomocą narzędzia historii bez ponownego uruchamiania?

14

Jestem w stanie użyć historypolecenia w CentOS, aby uzyskać listę wcześniej wprowadzonych poleceń, jednak jeśli zrobię coś takiego: !372historia spróbuje uruchomić polecenie, do którego się odwołuje.

Potrzebuję poprzedniego polecenia uruchomienia, aby pojawił się w bieżącym kursorze. Oto przykład:

[dev@home ~]$ previous_command_no_execute!372  
centosnoob
źródło

Odpowiedzi:

25

A może wstawisz to do linii poleceń:

$ !372

Następnie naciśnij, ESCa następnie CTRL+E. Spowoduje to automatyczne rozszerzenie w wierszu poleceń bez uruchamiania go. (rozszerza również wszystko inne w linii, w tym zmienne env)

O ile mi wiadomo, działa to tylko na Bash.

SmallClanger
źródło
Tak, to jest dokładne rozwiązanie.
centosnoob
1
Aby znaleźć rozwiązanie w Zsh, naciśnij klawisz Tab po wpisaniu, !372a rozwinie je dla Ciebie.
Reid
10

Możesz użyć, Ctrlra następnie wpisać niektóre znaki z oryginalnego polecenia, np

(reverse-i-search)`/etc': sudo /etc/init.d/apache2 restart

powyżej wpisałem Ctrl-r /etci wyciągnęło to sudo /etc/init.d/apache2 restartpolecenie z historii

użytkownik9517
źródło
6

history | grep 372 powinien działać, prawda?

Edytować:

Dodatkowo możesz zrobić coś takiego, echo !372 > /dev/clipaby umieścić katalog poleceń w schowku.

MDMarra
źródło
zawsze działało dla mnie ...
voretaq7
nie, to tylko stwierdza, że ​​wcześniej uruchomiono określone polecenie.
centosnoob
Zatem zarówno ja, jak i @ voretaq7 nie rozumie twojego pytania. Czy mógłbyś być trochę bardziej jasny?
MD Marra
@MDMarra Zaktualizowałem pytanie. Mam nadzieję, że rzuci nieco więcej światła.
centosnoob
@centosnoob patrzy na twoją aktualizację i zakładając, że twoja konsola obsługuje mysz i kopiuj-wklej (i rzadko zdarza się być bezpośrednio na konsoli w stylu terminalu bez możliwości kopiowania-wklejania) rozwiązanie kopiowania i wklejania jest naprawdę najmniej bolesne . Komenda edycji vi stylu jak wskazano w mojej odpowiedzi ma innej opcji, ale jestem vi fanatyk i nawet ja nie używać vi stylu edycję wiersza poleceń ...
voretaq7
4

MDMarra podał prosty sposób ( history|grepi skopiuj / wklej za pomocą środowiska pulpitu, pod warunkiem , że masz). Dostarczę to, co nazywam twardą drogą, co działa, jeśli nie masz środowiska pulpitu lub myszy.

Zakładając, że uruchamiasz bash jako swoją powłokę:

$ set -o vi 372k
$ESC

(teraz będziesz mieć polecenie, które uruchomiłeś 372 polecenia temu, w linii, i będziesz w vitrybie poleceń w stylu. Edytuj tak, jakbyś używał ex/ vi)

voretaq7
źródło
Ciekawy. Wydaje się, że działa to tylko wtedy, gdy wcześniej uruchomiono „set -o vi”. Może trzeba to umieścić w profilu bash lub coś takiego.
Matt
To jedna z tych rzeczy: „Zawsze używam vi, dlaczego nie używam powiązań vi do edycji linii w bash”, które zdajesz sobie sprawę z szokiem. Przyzwyczajenie się do tego zajmuje trochę czasu, a następnie wiązania w stylu emacsa, których wszyscy inni używają, wydają się dziwne i bezużyteczne.
cjc
@Matt Tak - musisz ustawić tryb edycji na viedycję stylu. To powinno działać jak najszybciej set -o vi, i powinien działać dla całej historii (tryb edycji jest tylko interfejs do historii poleceń powłoki i innymi).
voretaq7
@cjc Używam vi jako mojego wybranego edytora, ale nie używam powiązań w stylu vi do edycji mojego wiersza poleceń (akurat wiedziałem, jak to zrobić w trybie vi poza górą mojej głowy, ale inni napisali odpowiednik w trybie emacsa, który może być bardziej przyjazny :).
voretaq7
4

Najprostszym i najszybszym sposobem na zrobienie tego, co chcesz, jest uruchomienie:

!372:p

następnie Enteri

MikeyB
źródło
0

Czy korzystasz z systemu stacjonarnego lub serwera?

W moim systemie stacjonarnym Kubuntu z otwartą powłoką obsługuje podświetlanie za pomocą myszy. Zazwyczaj zaznaczam tekst za pomocą myszy i klikam środkowym przyciskiem myszy, aby go wkleić. Czy to by Ci pasowało?

Możesz więc grep dla polecenia. Zaznacz tekst. Wklej go środkowym przyciskiem myszy, a następnie edytuj.

Może być lepszy sposób, ale to działa dla mnie.

Matt
źródło
0

nie ma polecenia automatycznego wklejania, ale możesz wywołać dowolne polecenie w edytorze, aby edytować je przed wykonaniem. może to osiągnąć to, czego szukasz, ale po wyjściu z polecenia polecenie zostanie wykonane, więc jeśli chcesz przerwać, powinieneś wyczyścić bufor edycji przed wyjściem z edytora.

fc -e vi 372 372

johnshen64
źródło