В статической системе (т.е. когда никакие изменения не происходят), да, существует алгоритм. Существует конечное число символьных ссылок, таким образом, они составляют конечный график, и циклы обнаружения являются финитарным процессом.
В живой системе нет никакого способа обнаружить циклы, потому что символьные ссылки могут измениться, в то время как детектор цикла работает. Чтение каждой символьной ссылки является атомарным, но переходить по символьной ссылке не. Если некоторые символьные ссылки продолжают изменяться, в то время как ядро делает обход, оно могло закончиться на бесконечном пути, включающем отличные ссылки.
В домашних каталогах нет стандартного места для дополнений bash. Вы можете либо проинструктировать людей скопировать ваш код завершения в их .bashrc
, либо дать им указание сохранить где-нибудь ваш сценарий определения завершения (который не должен быть в их $ PATH
) и исходный код это из их .bashrc
. Я рекомендую второй вариант, так как он значительно упрощает обновление.
. ~/.bash_completions/jmc_app
Обычно ваши завершения должны быть определены в скрипте с тем же именем, что и программа, для которой он завершается, содержащем определение функции с тем же именем с добавленным подчеркиванием и вызовом complete
для установки завершения. :
# jmc_app completion
_jmc_app () {
…
}
complete -F _jmc_app jmc_app