iperf - отличный клиент-серверный инструмент для мониторинга использования полосы пропускания (сети) через соединения, будь то LAN или WAN.
Результат compgen содержит цветовые коды терминалов, потому что вы поместили их туда. Вы должны использовать alias ls='ls --color=auto'
, чтобы получить цвета только тогда, когда ls
печатает на терминал, а не когда вывод используется другой командой.
Но и без псевдонима compgen -W "$(ls /someDir/)"
не работает. Он вызывает ls
для создания списка имен файлов, но вывод команды представляет собой строку, а не список. compgen
разбивает вывод ls
на пробелы, что не удается, если какое-либо из имен файлов содержит символ пробела. Вместо этого вам нужно создать список имен файлов и удалить префикс каталога. Не проверено:
files=(/someDir/*)
if [[ -e ${files[0]} -o -L ${files[0]} ]]; then
for f in "${files[@]}"; do
compgen -- "${f#/someDir/}"
done
fi
Вы не получите цвета. Я не думаю, что bash способен раскрашивать завершения. Система завершения должна контролировать ее отображение на терминале, вы не можете прокрасться управляющими символами в то, что отображается, и надеяться не запутать систему завершения. Если вам нужна оболочка с приятными функциями , такими как цветные дополнения, используйте zsh(или fish , если вам не нравится конфигурируемость ).
Здесь вообще не используйте ls
; цвета в любом случае не должны быть частью вывода, так как вы не хотите, чтобы они были частью завершения. -W
не является хорошим выбором для имен файлов, так как любое совпадающее имя файла может содержать символ, используемый для разделения слов в аргументе на -W
.
Вы должны просто использовать glob, чтобы установить COMPREPLY
напрямую:
COMPREPLY=( "$cur"* )