Буфер обмена Bash является внутренним для bash, bash не подключается к X-серверу.
Что вы могли бы сделать, это изменить значение, M-w
чтобы скопировать выделение в буфер обмена X в дополнение к внутреннему буферу обмена bash. Однако интеграция с bash довольно слабая, и я не думаю, что есть способ получить доступ к информации о регионе или к буферу обмена из кода bash. Вы можете сделать привязку клавиш, чтобы скопировать всю строку в буфер обмена X.²
if [[ -n $DISPLAY ]]; then
copy_line_to_x_clipboard () {
printf %s "$READLINE_LINE" | xsel -ib
}
bind -x '"\eW": copy_line_to_x_clipboard'
fi
Если вы хотите делать что-то необычное в оболочке, переключитесь на zsh, который (помимо других преимуществ) имеет гораздо лучшую интеграцию между редактором строк и языком сценариев.
if [[ -n $DISPLAY ]]; then
x-copy-region-as-kill () {
zle copy-region-as-kill
print -rn -- "$CUTBUFFER" | xsel -ib
}
x-kill-region () {
zle kill-region
print -rn -- "$CUTBUFFER" | xsel -ib
}
zle -N x-copy-region-as-kill
zle -N x-kill-region
bindkey '\C-w' x-kill-region
bindkey '\ew' x-copy-region-as-kill
fi
¹
Gnome специально не имеет буфера обмена, это общее для X.
²
Начиная с bash 4.1, в коде синтаксического анализа ключа есть ошибка: связанные последовательности ключей bind -x
могут содержать не более двух символов. Я думаю, что bash 4.2 исправляет некоторые случаи более длинных префиксов, но не все из них; Я не исследовал детали.