Apenas pela mesma razão pela qual isso não funcionará:
$ export a=1
$ bash -c 'echo $a; let a++'
1
$ echo $a
1
Variáveis de ambiente são herdáveis , não compartilháveis. Como autocomplete.sh
é executado como um novo processo filho, ele pode ler todas as variáveis principais, mas não pode enviar novos valores de volta.
Para modificar READLINE_LINE
e READLINE_POINT
, você precisa executar seu preenchimento automático no mesmo processo - source
e as funções ajudarão você.
# autocomplete.sh
# should be sourced from ~/.bashrc or something
autocomplete() {
echo $READLINE_LINE $READLINE_POINT
EXPANSION=($(magical_autocomplete $READLINE_LINE))
#we store the desired value for the line in ${EXPANSION[0]}
[[ ${#EXPANSION[@]} -gt 1 ]] && echo ${EXPANSION[@]:1}
READLINE_LINE=${EXPANSION[0]}
READLINE_POINT=${#READLINE_LINE}
}
Ligação:
if [[ -s "$HOME/.bashrc.d/autocomplete.sh" ]]; then
source "$HOME/.bashrc.d/autocomplete.sh"
bind -x '"\t" : autocomplete'
fi