Я понял это, в основном вдохновленный этим сообщением на форуме Arch .
getty
, который в настоящее время работает после tty6
, удалив /etc/init/tty6.conf
, это вступит в силу после перезагрузки. tty6
, добавив lxc.cgroup.devices.allow = c 4: 6 rwm
в конфигурацию контейнера Автозапуск getty
] в контейнере, отредактировав /etc/init/tty6.conf
вместо запуска контейнера
на уровне выполнения [23] # и not-container
Сейчас Ctrl + Alt + F6 - консоль контейнера.
Дополнительные операции необходимы для tty [1-4]
, поскольку / dev / tty [1-4]
в контейнере не являются устройствами tty.
Разделение слов.
Этот пример очень маловероятен, но возможен , поэтому, если вы хотите защищаться, заметайте следы кавычками:
$ set -x
$ value1=5
+ value1=5
$ value2=3
+ value2=3
$ [ $value1 -eq $value2 ]
+ '[' 5 -eq 3 ']'
Хорошо, пока все хорошо. Давайте бросим ключ в шестерни:
$ IFS=456
+ IFS=456
$ [ $value1 -eq $value2 ]
+ '[' '' -eq 3 ']'
bash: [: : integer expression expected
Ой.
$ [ "$value1" -eq "$value2" ]
+ '[' 5 -eq 3 ']'
Ах.
На самом деле здесь кавычки не нужны. Это один из очень немногих случаев, когда безопасно использовать переменную без кавычек. Вы можете подтвердить это с помощьюset -x
:
$ var1=""
$ var2="3"
$ set -x
$ if [[ $var1 -eq $var2 ]]; then echo "match!"; else echo "no match!"; fi
+ [[ '' -eq 3 ]]
+ echo 'no match!'
no match!
$ if [[ "$var1" -eq "$var2" ]]; then echo "match!"; else echo "no match!"; fi
+ [[ '' -eq 3 ]]
+ echo 'no match!'
no match!
Как вы можете видеть выше, версии теста в кавычках и без кавычек сводятся к одному и тому же с помощью bash. То же самое должно быть верно для zsh
и, я думаю, любой другой оболочки, поддерживающей оператор [[ ]]
.
Обратите внимание, что это , а не случай с более портативным[ ]
:
$ if [ $var1 -eq $var2 ]; then echo "match!"; else echo "no match!"; fi
+ '[' -eq 3 ']'
sh: [: -eq: unary operator expected
+ echo 'no match!'
no match!
Конструкция [ ]
, в отличие от конструкции [[ ]]
, не требует цитирования.
Некоторые полезные ссылки, чтобы узнать больше о том, когда и почему требуется цитирование:
Несмотря на то, что двойные кавычки не обязательны, причины для их использования:
value1
и value2
являются переменными, и вы можете не знать, что они содержат. В противном случае вы могли бы также спросить: «Зачем возиться с переменными вместо проверки if [[ 5 -eq 3 ]]
? Или, если пойти дальше, зачем вообще возиться с if
, когда вы уже знаете, что 5 не равно 3? Часто лучше быть оборонительным (Это правда, что разбиение слова -не происходит в [[
, но случаи, когда разбиение слова -происходит , а не , редки. Опять же, см. первый пункт.)Не имеет прямого отношения к вашему вопросу, но я использую
if (( $value1 == $value2 )); then
когда я сравниваю числа, но и здесь кавычки не нужны.
Вы абсолютно правы!
Заключение в двойные квадратные скобки вообще не имеет смысла, по крайней мере, в этом случае.
Но поскольку я ежедневно использую двойные кавычки --, особенно для выражений с одной квадратной скобкой, передачи аргументов функциям и сценариям, а также иногда присваивания переменных (, что совершенно бесполезно для простых формулировок )--, я думаю, что некоторые люди, по крайней мере я, инстинктивно заключаю в двойные кавычки расширения переменных .
Double quoting can give you a sense of savety. It is like coming home where double quotes are. - D. Kummer
Преимущество использования двойных кавычек последовательно и понятно --, но только если это имеет смысл --, заключается в том, что коллеги, которые плохо знакомы с bash, могут научиться тому, как писать более стабильные сценарии . Это также подчеркивает тот факт, что искусство обработки данных с помощью bash больше связано с разделением потоков данных (, включая переменные ), с помощью разделителей полей и передачей их через фильтры . Как только вы отделите фрагменты данных от потока, соедините их вместе двойными кавычками!
Еще одним преимуществом может быть лучшая читаемость сценариев bash со строками в двойных кавычках в редакторе подсветки кода .