Podczas uruchamiania poleceń w CLI chcę skopiować polecenie, które właśnie uruchomiłem lub cokolwiek co napisałem w terminalu i wkleić je gdzie indziej bez użycia myszy.
Jak na poniższym obrazku, chcę skopiować polecenie aktualizacji (całkowicie lub częściowo) bez użycia myszy i wkleić go gdzieś.
terminal
gnome-terminal
copy-paste
prayagupd
źródło
źródło
Odpowiedzi:
Można użyć
screen(1)
w swoim emulatorze terminala wyboru (xterm
,gnome-terminal
...).Potrzebna funkcjonalność jest wbudowana
screen
. Musisz zapoznać się ze sposobem działania:Możesz „skopiować” polecenie i „wkleić” w innym terminalu.
screen
jest fajny, a kiedy zaczniesz go używać, będziesz się zastanawiać, jak to możliwe, że go wcale nie używałeś.źródło
screen
polecenia, więc zainstalowałem go w terminalu gnome i uruchomiłemscreen
w terminalu. Ale później nie można było zacząć. Nie zrozumiałem też, co masz na myśli mówiąc o wbudowanym ekranie.man screen
. Napisałem także „wbudowany w ekran”, co oznacza, że funkcja kopiuj / wklej jest obecna wscreen
projekcie .space
klawisza, aby wybrać pożądany obszar. Musisz użyćY
do skopiowania całej linii lub pożądanego obszaru. Ekran jestvi
przyjazny dla ruchów.AltGr
kluczowe MamAlt
screen
Narzędzie nie działa wyjaśnił tutaj. I wydaje się, że nie zapewnia to odpowiedzi na pytanie.Oprócz podanych już odpowiedzi można rozważyć przejście na bardziej elastyczny emulator terminala.
Jeśli jesteś przygotowany na zmianę terminali na rxvt-unicode , możesz użyć narzędzia takiego jak urxvt-perls : zbiór skryptów zapewniających następujące funkcje klawiatury w tym emulatorze terminali:
Po prostu zainstaluj pakiet, a następnie dodaj kilka linii do swojego
~/.Xresources
, a następnie możesz odłączyć gryzonia na dobre.źródło
Możesz to zrobić za pomocą programu takiego jak
xclip
:Po zainstalowaniu możesz użyć go do połączenia ze swoim schowkiem X. Niestety, nie zadziała to w twoim
mysql
środowisku (ma własny bufor dla kopiowanych linii), ale zadziała, jeśli chcesz uruchomić „normalne” polecenie. Na przykład :Wpisz, CtrlAaby przejść na początek wiersza, umieść polecenie w cudzysłowie, a następnie powtórz je:
Teraz w schowku środkowego kliknięcia znajduje się „To długa linia poleceń”.
Jeśli chcesz wkleić bez użycia myszy, zależy to od miejsca wklejenia. Możesz wkleić do innego terminala, uruchamiając:
Możesz wkleić do tego samego terminala, po prostu zabijając (wycinając) polecenie, CtrlKa następnie wklejając CtrlY.
Możesz także zapisywać polecenia między terminalami, korzystając z historii bash. Dodaj ten wiersz do
~/.bashrc
:PROMPT_COMMAND
jest specjalną zmienną bash. Jeśli jest ustawiony, wartość jest wykonywana jako polecenie przed wydaniem nowego monitu.history -a
zapisze historię bieżącej sesji do pliku historii ihistory -r
przeładuje ten plik. Oznacza to, że każde uruchomione polecenie zostanie natychmiast zapisane w pliku historii.Teraz, gdy uruchomisz długą linię poleceń, możesz przełączyć się na inny terminal i nacisnąć klawisz Return (aby uruchomić
$PROMT_COMMAND
lub alternatywnie otworzyć nowe okno terminala) i będzie on dostępny dla historii tego terminalu. Jeśli teraz trafisz Up, możesz uruchomić go na nowym terminalu.źródło
$ xclip -o
nie jest to, czego chcę, ponieważ po prostu drukuje to, coxclipe
d. Ale +1 dla,Ctrl+A
a następnieCtrl+K
iCtrl+Y
dla wycinania i wklejania co najmniej w tym samym terminalu.@evilsoup sugeruje dobre rozwiązanie, ale często się psuje.
Szybkie rozwiązanie
Oto rozwiązanie, które nigdy się nie psuje .
Po prostu uruchom to polecenie, a skopiuje ono właśnie uruchomione polecenie do schowka.
Zasadniczo robi to, że drukuje historię poleceń i pobiera drugie ostatnie polecenie i podaje je do schowka (ostatnie to samo, więc wybiera drugie ostatnie polecenie).
Funkcja niestandardowa
Rozwijając szybkie rozwiązanie, oto mała funkcja, którą napisałem, która jest dość inteligentna i skopiuje ostatnio używane polecenie. Możesz także podać argumenty numeryczne, aby skopiować ostatnie n-te polecenie. Np. Do skopiowania drugiego ostatniego polecenia podaj
2
jako argumentSkopiuj i wklej powyższą funkcję do swojego
~/.bashrc
pliku. Zauważ, że jeśli umieścisz to w osobnym pliku skryptu bash i uruchomisz skrypt, nie działałoby to, ponieważ polecenie historii nie byłoby w stanie uzyskać dostępu do twojej historii w takim przypadku.Na koniec uruchom go jako:
Co więcej, jedną z fajnych funkcji dodanych do tej funkcji jest to, że usuwa się z historii po uruchomieniu. Jest to pomocne, ponieważ wówczas indeks „wstecz” poleceń nie zmienia się.
źródło
screen
. Druga najwyżej oceniana odpowiedź również przyjęłabash
ilinux
. Co więcej, założenie, żebash
to nie jest wielka sprawa, ponieważ skrypt nadal działałby w Zsh lub w większości innych powłok.To polecenie używa ekspansji historii basha (
!!
rozwija się do ostatniego wiersza wpisanego w terminalu). Prawdopodobnie będziesz musiał zainstalować alboxclip
alboxsel
.Spowoduje to umieszczenie twojego ostatniego polecenia w schowku Ctrl+ v, dzięki czemu będziesz mógł wkleić się do dowolnego programu GUI (lub z Ctrl+ Shift+ vw większości emulatorów terminali lub
"+p
w vimie).Spowoduje to uszkodzenie niektórych wierszy zawierających podwójne cudzysłowy, na przykład:
Działa to jednak dla polecenia, które podałeś jako przykład; powinieneś mieć problemy tylko wtedy, gdy podwójne cudzysłowy uciekają
;
&
&&
|
||
i tak dalej.źródło
echo !!
i będzie działać bez zarzutu (z wyjątkiem nieprawdopodobnym przypadku, poprzednia komenda zaczęła z-n
lub-e
lub kilka innych opcji, któreecho
sama potrwa).Może nie jest to najwygodniejsze rozwiązanie, ale go używam, więc może być pomocne dla innych, ponieważ nie wymaga dodatkowej miękkiej instalacji.
Musisz utworzyć plik tymczasowy w dowolnym wygodnym katalogu
Przenieś wymagany kierunek lub tekst do tego pliku. Do przesyłania kierunku możesz użyć
Aby uzyskać kierunek z pliku, użyj polecenia
W przypadku kopiowania i wklejania poleceń ten system będzie działał albo. Mam nadzieję, że było to pomocne
źródło