проблема с поиском значений переменных, начинающихся с табуляции

В моем случае я установил virtualbox-guest-x11на основной блок, поэтому я перепутал драйверы x11. Итак, я получал это сообщение об ошибке$HOME/.xsession-errors:

initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused syndaemon: no process found /etc/mdm/Xsession: Beginning session setup... localuser:raskolnikov being added to access control list

Я удалил пакет и заново -установил cinnamon.

aptitude remove virtualbox-guest-x11 -y aptitude install cinnamon -y

Перезагрузил бокс и все заработало.

0
05.12.2019, 09:46
1 ответ

Встроенная команда readразделяет слова, используя значение IFS, которое по умолчанию содержит пробел, табуляцию и новую строку. Следовательно, при использовании readдля ввода вкладка удаляется.

Начните функцию с:

IFS_SAVE="$IFS"
IFS=' '

Теперь только пробелы будут разделять слова. По окончании функции восстановить IFS до исходного значения:

IFS="$IFS_SAVE"

Обратите внимание, что вы можете использовать литеральную табуляцию, если она экранирована обратной косой чертой. Кроме того, я бы не стал использовать grepдля соответствия вкладке, по возможности используйте встроенные функции, так как это быстрее. Моя версия функции будет:

function make_cmd()
{
  SAVE_IFS="$IFS"
  IFS=' '
  read target colon sources
  for src in $sources; do
    if [ $src -nt $target ]; then
      while read cmd; do
        case "$cmd" in
          $'\t'*)  echo "executing $cmd"
                eval ${cmd# }
                ;;
          *)    ;;
        esac
      done
      break;
    fi
  done
  IFS="$SAVE_IFS"
}

$'\t'заменяет буквальную вкладку (благодаря Кусалананде за подсказку ).

Вставьте символ табуляции после #в подстановку переменных. Однако использование printfможет быть более читабельным.

1
28.01.2020, 02:38

Теги

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