Я предполагаю, что вы хотите, чтобы вывод 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)" )
(Если я правильно понял ваш конвейер, то я не тестировал вышеуказанное.)
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")