Функция завершения Bash начинает выплевывать все слова после запуска моего скрипта
У меня есть скрипт завершения bash, который работает до тех пор, пока я не запусту свой скрипт, который в основном представляет собой набор функций, которые выполняют эхо и отправляют команды в окна tmux.
Вот мой сценарий:
#!/bin/bash
_magComplete()
{
local cur=${COMP_WORDS[COMP_CWORD]}
local prev=${COMP_WORDS[COMP_CWORD-1]}
case "$prev" in
mag)
tags="start stop restart view cd venv up clean build custom"
;;
start | stop | restart | up | clean | build | custom)
tags="all app apps service services"
;;
view | cd | venv | test)
tags="app apps service services"
;;
app)
tags="$(ls ~/projects/abcd/apps/)"
;;
service)
tags="$(ls ~/projects/abcd/services/)"
;;
esac
COMPREPLY=($(compgen -W "${tags}" $cur))
}
complete -F _magComplete mag
К сожалению, я не могу поделиться сценарием "mag", для которого это завершение, но, возможно, кто-то может пролить свет на возможные причины. Вот пример вывода:
ubuntu@precise64 ~
$ mag start all ; mag stop service ep3
[ Starting service authen ]
[ Starting service backup ]
[ Starting service cfg ]
[ Starting service devemu ]
[ Starting service drv ]
[ Starting service ep3 ]
[ Starting service mv ]
[ Starting service rtr ]
[ Starting service selfmon ]
[ Starting service sigmon ]
[ Starting service snmptrap ]
[ Starting service store ]
[ Starting service wamp ]
[ Starting app cfgmgt ]
[ Starting app devices ]
[ Starting app exe ]
[ Starting app interfaces ]
[ Starting app mv ]
[ Starting app ports ]
[ Starting app selfmon ]
[ Starting app snmp ]
[ Starting app usrmgt ]
[ Starting app vueweb ]
* Restarting nginx nginx [ OK ]
[ Stopping service ep3 ]
ubuntu@precise64 ~
$ mag start stop restart view cd venv up clean build custom
Завершение сначала хорошо работает, но после запуска моего скрипта, одно нажатие [TAB] заполняет командную строку всеми возможными словами, вместо того, чтобы предлагать их ниже. Затем я должен вернуть все назад и не могу снова использовать завершение, пока я не перезагружу свою оболочку.
Как упоминалось ранее, мой скрипт 'mag' состоит в основном из echo и функций, которые отправляют команды в окна tmux (включая создание и уничтожение этих окон / сессий). Там происходит некоторое зацикливание, если это имеет значение.
Помогите!
1 ответ
Несмотря на то, что я несколько дней пытался решить эту проблему, мне удалось найти решение проблемы после публикации вопроса.
Мой скрипт "mag" имел функцию, которая изменила переменную "IFS", но не вернула ее обратно. Это потенциально повлияло на многие вещи. Мне удалось изменить свой код, чтобы больше не трогать IFS, и все хорошо.