Почему установка «mi» в LS _COLORS влияет на завершение вкладок postgresql и python?

Я предполагаю, что вы хотите, чтобы вывод echo... | awkсохранялся в переменной и, в частности, добавлялся к одному из массивов.

Во-первых, для захвата вывода команды используйте"$( cmd... )"(подстановку команд ). В качестве тривиального примера это печатает ваше имя хоста:

var=$(uname -n)
echo $var

Во-вторых, для добавления к массиву необходимо использовать синтаксис присваивания массива с круглыми скобками справа. Это добавит значение varк массиву:

array+=( $var )

И в-третьих, раскрытие $varи подстановка команд $(...)могут быть разделены на слова, поэтому вы хотите использовать круглые скобки вокруг них. Снова тривиальный пример, это помещает полный вывод uname -aкак одиночный элемент в массиве:

array+=( "$(uname -a)" )

Или, в Вашем случае, полностью:

data1+=( "$(echo "$1" | tr ' ' '\n'|  awk 'f{print;f=0;exit} /of/{f=1}')" )

(Обратите внимание, что кавычки внутри подстановки команды отличаются от кавычек вне ее . Цитата перед $1не останавливает цитирование, начатое вне $(), в отличие от того, что подразумевает подсветка синтаксиса в SE.)

Вы можете упростить чтение, поместив конвейер в функцию:

get_data1() {
    echo "$name" | tr ' ' '\n'|  awk 'f{print;f=0;exit} /of/{f=1}'
}
...
data1+=( "$(get_data1)" )

Или, поскольку конвейеры кажутся похожими, используйте функцию, чтобы избежать повторения кода:

get_some_field() {
    echo "$1" | tr ' ' '\n'|  awk -vkey="$2" 'f{print;f=0;exit} $0 ~ key {f=1}'
}

, а затем

data1+=( "$(get_some_field "$name" of)" )
data2+=( "$(get_some_field "$name" is)" )
data3+=( "$(get_some_field "$name" size)" )

(Если я правильно понял ваш конвейер, то я не тестировал вышеуказанное.)

1
19.08.2020, 00:50
1 ответ

GNU readlineиспользуется, что подтверждается перечислением модули по умолчанию:

$ python3
>>> import sys
>>> sys.modules.keys()
dict_keys([...,'readline', 'atexit', 'rlcompleter'])

Readline, в свою очередь, использует LS_COLORS. Из man 3 readline,

colored-stats (Off)
If set to On, readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the LS_COLORS environment variable.

Если вы не уверены, вернитесь к интерактивному сеансу Python и введите

>>> a<TAB><TAB>
abs(     all(     and      any(     as       ascii(   assert   async    await
>>> import readline
>>> readline.parse_and_bind("set colored-stats off")
>>> a<TAB><TAB>
abs(     all(     and      any(     as       ascii(   assert   async    await

После отключения цветных -характеристик предлагаемые завершения (bs(, ll(и т. д. )должен быть на нормальном цвете терминала. Префикс aпо-прежнему наследует цвет из LS_COLORS, и вы также можете отключить его с помощью

readline.parse_and_bind("set colored-completion-prefix off")
1
18.03.2021, 23:11

Теги

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