Wpisując polecenie w bash, chciałbym móc nacisnąć kombinację klawiszy, aby uruchomić program i wstawić wyjście programu do wiersza poleceń w pozycji kursora. Na przykład:

$ cat <Ctrl-G>
# bash runs a program that prints "some-file" to stdout
$ cat some-file

Chciałbym, aby pracować dla każdego polecenia - nie tylko cat.

Próbowałem następujące podejście:

bind -x '"\C-g":"echo some-file"'

Ale "plik niektórych" jest drukowany na terminalu, a nie wiersz poleceń:

$ cat <Ctrl-G>
some-file
$ cat 
1
Marcin Barczyński 19 marzec 2020, 12:22

2 odpowiedzi

Najlepsza odpowiedź

Odpowiedź leży w READLINE_LINE i READLINE_POINT zmienne ustawione przez Bind:

-X Keyeq: polecenie powłoki

Spowodować wykonywanie polecenia powłoki, gdy wprowadzono klawiszeq. Gdy wykonywana jest polecenie Shell, powłoka ustawia zmienną Readline_line do zawartości buforu linii Readline i zmiennej Readline_point do bieżącej lokalizacji punktu wstawiania. Jeśli wykonany polecenie zmienia wartość readline_line lub readline_point, te nowe wartości zostaną odzwierciedlone w stanie edycji.

Na przykład:

stuff() { 
    local pre="${READLINE_LINE:0:$READLINE_POINT}"
    local suf="${READLINE_LINE:$READLINE_POINT}"
    local stuff='my string here'
    READLINE_LINE="${pre}$stuff$suf"
    ((READLINE_POINT += ${#stuff}))
}

bind -x '"\C-g":"stuff;"'

Kredyty do Greg Wooledge, który odpowiedział na moje pytanie w Pomoc- Lista mailingowa Bash

0
Marcin Barczyński 23 marzec 2020, 17:04

Mam Lubuntu i SO X Windows, OpenBox i rozwiązuję ten problem, mając skróty zdefiniowane w Openbox.

nano ~/.config/openbox/lubuntu-rc.xml
#setting shortcuts to point at a special bash script
openbox --reconfigure # restart shortcuts

Więc jeśli naciśnieję CTRL + G w dowolnym miejscu, uruchamia podany skrypt, który wynika wynik do schowka, powiedzmy:

 echo "Hello World at $(date +%Y-%m-%d_%H-%M-%S)" | xsel -b -i 

Następnie wklejam wyjście w terminalu bash (Ctrl + Shift + V).

Wiem, że nie jest czystym bash, ale może ci pomóc.

Ps. Jeśli muszę wysłać klucze bezpośrednio do aplikacji, używam xdotool .

0
xerostomus 21 marzec 2020, 06:50