Результат bash compgen содержит цветовые коды терминала

iperf - отличный клиент-серверный инструмент для мониторинга использования полосы пропускания (сети) через соединения, будь то LAN или WAN.

1
29.08.2017, 02:20
2 ответа

Результат 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 , если вам не нравится конфигурируемость ).

0
27.01.2020, 23:45

Здесь вообще не используйте ls; цвета в любом случае не должны быть частью вывода, так как вы не хотите, чтобы они были частью завершения. -Wне является хорошим выбором для имен файлов, так как любое совпадающее имя файла может содержать символ, используемый для разделения слов в аргументе на -W.

Вы должны просто использовать glob, чтобы установить COMPREPLYнапрямую:

COMPREPLY=( "$cur"* )
1
27.01.2020, 23:45

Теги

Похожие вопросы