Pax анализирует /.*\\// directory \\ // p
как:
/
- это символ-разделитель. . * \\
- регулярное выражение, соответствующее любой строке, оканчивающейся обратной косой чертой (обратная косая черта помещает следующий символ в кавычки). /
отделяет регулярное выражение от замещающего текста. /
заканчивают заменяющий текст. каталог \\ // p
завершает мусор. Очевидно, вы хотели использовать обратную косую черту для защиты косых черт, чтобы они были частью регулярного выражения, а не разделителями. Для сценария оболочки там есть дополнительные обратные косые черты (но они могут быть из-за того, что это происходит в сценарии perl, подробнее об этом позже). С косой чертой тоже что-то не так. Если вы хотите удалить любой / ведущий / префикс / вверх / до / каталога
из путей, тогда он должен быть
pax -r -z -s '/.*\/directory\///p' -f "$input_path/$tgz"
. Было бы легче читать с другим разделителем. Тогда вам не нужно будет избегать косых черт.
pax -r -z -s '!.*/directory/!!p' -f "$input_path/$tgz"
Все это предполагает, что команда является командой оболочки . Вы упомянули сценарий Perl; Perl добавил бы свой собственный уровень цитирования, поэтому то, что писать, зависит от того, как строка вставлена в сценарий Perl. Использование $ input_path / $ tgz
определенно проблематично, потому что оно интерполирует строку в сценарий оболочки, так что строка будет анализироваться как фрагмент оболочки, а не имя файла.
Если команда оболочки находится между двойными кавычками или обратными кавычками, то обратную косую черту нужно удвоить.По-прежнему существует проблема неуместного слэша. Вот способ записать это на Perl:
my $quoted_file_name = quotemeta("$input_path/$tgz");
system("pax -r -z -s '!.*/directory/!!p' -f $quoted_file_name");
Если вы используете систему
, тогда вам следует использовать форму списка, чтобы избежать проблем с цитированием, не вызывая промежуточную оболочку.
system('pax', '-r', '-z', '-s', '!.*/directory/!!p', '-f', "$input_path/$tgz");
console-setup
В Debian Linux и Debian FreeBSD дизайн предназначен для X-сервера и виртуальных терминалов ядра, чтобы совместно использовать один набор информации о конфигурации. Пакет console-setup
предоставляет инструменты и сценарии запуска, которые принимают конфигурацию клавиатуры / шрифта X-сервера, преобразуют ее и используют для настройки виртуальных терминалов ядра.
В частности: служба console-setup
вызывает команду setupcon --save
, которая генерирует сценарии в / etc / console-setup
, содержащие преобразованную клавиатуру. и инструкции по установке шрифтов, которые запускаются на виртуальных терминальных устройствах ядра по правилам udev. Раскладка клавиатуры преобразуется из формата XKB в loadkeys
с помощью ckbcomp
, а сгенерированный скрипт, вызванный из правила udev, запускает loadkeys
.
Итак, в Debian Linux и Debian FreeBSD вам необходимо убедиться, что ваши переменные XKBMODEL
, XKBLAYOUT
, XKBVARIANT
, XKBOPTIONS
указаны правильно. устанавливается в / etc / default / keyboard
. В частности, в вашем случае вам необходимо убедиться, что переменная XKBOPTIONS
имеет caps: swapescape
. Затем вам нужно убедиться, что у вас правильно установлен пакет console-setup
.
В операционных системах systemd все несколько менее интегрировано, чем в Debian. Есть файл конфигурации с именем /etc/vconsole.conf
и служба с именем systemd-vconsole-setup.service
, которая обрабатывает его при начальной загрузке системы (в ответ на правило udev, объявляющее о существовании подсистемы виртуального терминала ядра). Но это вообще не связано с конфигурацией X-сервера.
В файле vconsole.conf
есть параметр KEYMAP
, обозначающий раскладку клавиатуры, которая передается в loadkeys
, который, опять же, не нужно явно запускать самостоятельно. . Но остается полностью на ваше усмотрение , чтобы создать (настраиваемую) раскладку клавиатуры, которая меняет местами Caps Lock и Escape и помещает ее туда, где loadkeys
могу найти это.
Чтобы получить больше объединенных настроек, нужно задействовать еще две службы, systemd-localed
и шину рабочего стола.Один запускает, скажем,
localectl set-x11-keymap pl pc105 "" "caps:swapescape", и служба D-BUS локали переписывает
/etc/vconsole.conf
с наилучшим предположением о карте ближайшего эквивалента для виртуального терминала ядра. Этот ближайший эквивалент может не быть точно эквивалентом, однако вы можете обнаружить, что он просто игнорирует параметры и тому подобное.
Конечно, вы всегда можете в качестве альтернативы использовать Debian ckbcomp
вручную для прямого преобразования раскладки клавиатуры XKB. ☺
systemd-vconsole-setup-service
. справочные страницы systemd. Freedesktop.org. vconsole.conf
. справочные страницы systemd. Freedesktop.org. localectl
. справочные страницы systemd. Freedesktop.org.