Bash удаляет первый символ в цикле for

У меня была та же проблема, и проблема заключалась в том, что libvirt не мог получить доступ к /dev/kvm. Поэтому вам нужно убедиться, что у пользователя есть права доступа к узлу устройства, например, запустив chown root.kvm /dev/kvm;chmod 660 /dev/kvm.

Я предполагаю, что он просто пытается настроить конфигурацию машины и возвращает эту ошибку, когда что-то не работает, поскольку считает, что проблема заключается в конфигурации.

2
15.01.2021, 14:25
1 ответ
IFS='\r\n'

Это устанавливает IFSв <backslash><letter r><backslash><letter n>, поэтому rв "root" и "Fri" и nв "Mon" и "Jan" действуют как разделители. Вы хотели использовать кавычки ANSI C -, $'...', которые превращают обратную косую черту в фактические управляющие символы CR и LR, то есть:

IFS=$'\r\n'

Обратите внимание, что вы также можете использовать

if [[ $entry = *pts* ]]; then...

для поиска строки, но и это, и echo | grepтакже будут соответствовать, например. поля, где ptsявляется частью имени пользователя.

Чтобы избежать этого, вы можете сделать что-то вроде этого:

#!/bin/bash
last -n 10 | while read -r line; do
    read -r  user term whatever <<< "$line"
    if [[ $term = *pts* ]]; then
        echo "$line"
    fi
done
7
18.03.2021, 22:36

Теги

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