/etc/udev/rules.d/70 -amdgpu.rules :1 Неверный оператор для GROUP. найдено в журналах ошибок

Если вывод вашего lastвыглядит следующим образом:

username  pts/2        1.2.3.4 via  Sun Sep  2 06:40 - 06:40  (00:00)

и вы хотите добавить символы новой строки там, где они были изначально, то я предлагаю немного изменить логику.Сначала прочитать входную строку -по строке -, и только после этого разбить строку на слова. Таким образом, нет необходимости явно искать скобки. И вы можете повторить весь цикл, обернув его внутри while true; do... done. Итак, у нас есть что-то вроде этого:

#!/bin/bash
set -f
while true; do
        last | while IFS= read -r line; do
                for word in $line; do
                        sleep.1
                        printf "%s " "$word"
                done
                echo     # prints a newline
        done
done

set -fотключает расширение имени файла, которое в противном случае могло бы произойти при расширении $lineбез кавычек. Кроме того, я бы использовал printfвместо echo для печати слов по ряду причин.

Если вы явно хотите искать закрывающую скобку, вы можете использовать [[.. ]]тест, :который позволяет сопоставлять шаблоны с шаблонами -, такими как шаблоны, или с регулярными выражениями.([[ $word =~ $re ]]будет соответствовать регулярному выражению)

#!/bin/bash
set -f
while true; do
        for word in $(last); do
                sleep.1
                printf "%s " "$word"
                [[ $word = *')'* ]] && echo
        done
done

Хотя этот, конечно, не добавляет новую строку в строки, где окончательная продолжительность входа в систему заменена чем-то вроде still logged in.

У конструкции for word in $whateverесть недостаток, заключающийся в том, что она обрабатывает несколько пробелов точно так же, как одиночные пробелы, поэтому в выводе скрипта столбцы не будут выровнены так аккуратно, как в оригинале.

1
24.12.2020, 18:37
1 ответ

У вас слишком много знаков равенства :должно быть GROUP="video", а не GROUP=="video".

3
18.03.2021, 22:41

Теги

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