Можно ли создать функцию bash, которая возвращается к текущей строке?
Например
#~/.bashrc
do-magic() {
# do some magic and return the input to current prompt line
# for example "hello"
}
bind -x '"\C-e":do-magic'
Затем
$ echo <ctrl+e>
# become
$ echo hello
решение1
Начиная с Bash 4.0Это можно сделать, изменив переменные READLINE_LINE
и READLINE_POINT
внутри функции. («Точка» — это текущая позиция курсора.) Например:
_paste() {
local str="Hello $(date +%F)!"
local len=${#str}
# Note: Bash 5.x wants the length in characters, but Bash 4.x apparently
# wanted bytes. To properly insert non-ASCII text, you used to need:
# local len=$(printf '%s' "$str" | wc -c)
# Insert the text in between [0..cursor] and [cursor..end]
READLINE_LINE=${READLINE_LINE:0:$READLINE_POINT}${str}${READLINE_LINE:$READLINE_POINT}
# Advance the cursor
READLINE_POINT=$((READLINE_POINT + len))
}
bind -x '"\C-e": _paste'
решение2
Вы можете использовать «ожидать»
вот вам подробный пример: https://stackoverflow.com/a/77953253/5521600