Wpis z mikrobloga

#linux #macos #freebsd #bash

czasami zdarza się, że w Bashu trzeba napisać dłuższą komendę. Poniżej wrzucam skrypt, który wystarczy wrzucić do ~/.bashrc i po odpaleniu terminala dostajemy możliwość edycji komendy w edytorze.

W Bashu jest C-x,C-e, które pozwala edytować komendę w edytorze, ale po jego zamknięciu/zapisaniu od razu komenda jest wykonywana.

Skrypt, który wrzucam pozwala edytować komendę bez wykonywania jej. Komenda jest wklejana do terminala i grzecznie czeka.

W trybie Vi wystarczy w normal-mode (czyli po wciśnięciu ESC) wcisnąć e.
W trybie Vi oraz Jeżeli nie używa się trybu Vi, klawisz F4 też otwiera edytor. F4 nie koliduje z aplikacjami otwartymi w terminalu - np. Midnight Commander.

Ja mam ustawione EDITOR=vim, więc edytuje komendy w Vimie. Wpisanie :wq zamyka Vima i wkleja komende do terminala, bez wykonywania jej.

Skrypt oczywiście znaleziony w necie. Plusy w nazwie funkcji bo lubie i żeby nie było przypadkiem jakichś kolizjii. Zmienne $READLINE_* są używane przez komendę bashową bind - normalnie tych zmiennych nie ma. Więcej o zmiennych Basha -> https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html

++enoexec() {

local editor="${EDITOR:-nano}"

tmpf="$(mktemp)"

printf '%s\n' "$READLINELINE" > "$tmpf"

"$editor" "$tmpf"

READLINELINE="$(<"$tmpf")"

READLINEPOINT="${#readlineLINE}"

rm -f "$tmpf"

}

bind -m vi-command -x '"e":++enoexec' # e w vi-mode/normal

bind -x '"\eOS":++enoexec' # F4


Od czasu do czasu skrypt się przydaje :)
  • 1