С помощьюhttps://www.reddit.com/r/i3wm/comments/94vknq/install_i3_from_centos_minimal_iso/иhttps://copr.fedorainfracloud.org/coprs/admiralnemo/i3wm-el7/вот как я установил i3 Window Manager в CentOS 7.6.1810 ,
01. Введите следующие команды:
$ yum install -y epel-release
$ yum clean all && yum update -y && yum upgrade -y
$ yum install -y xorg-x11-server-Xorg xorg-x11-drv-vmware xorg-x11-drv-vmmouse xorg-x11-drv-evdev mesa-dri-drivers xorg-x11-xinit-session xterm
$ yum install -y dejavu-sans-fonts dejavu-sans-mono-fonts dejavu-serif-fonts i3 i3status lightdm
$ systemctl set-default graphical.target
$ systemctl isolate graphical.target
02. Выберите i3 справа вверху и войдите на сервер,
03. При первом входе в систему он настроит i3(дважды нажмите Enter, если конфигурация по умолчанию подходит ),
Вот и все. Наслаждаться!
Не следует использовать sed
для работы с файлами YAML или файлами, написанными в любом структурированном формате документа. (YAML, JSON, XML и т. д. )Вместо этого используйте синтаксический анализатор, написанный для этого формата документа.
Для YAML есть два хороших инструмента, написанных для оболочки, оба имеют сбивающее с толку название yq
. yq
изhttps://kislyuk.github.io/yq/— простая в использовании jq
оболочка (, а jq
— парсер JSON ).
Для части этого ответа я предполагаю, что вы определили две переменные оболочки old_commit
и new_commit
точно так, как показано в вашем коде в вопросе. Вывод, который вы показываете позже, говорит мне, что вы на самом деле назначаете их не как статические строки, а через какой-то другой процесс, о котором вы ничего не говорите о (, в котором $old_commit
, кажется, получает завершающий символ новой строки ), поэтому я не могу много говорить об этом и буду игнорировать это.
Чтобы изменить значение клавиши image
в back
, в services
, используя эту реализацию yq
, вы должны использовать
yq -Y '.services.back.image |= "index.docker.io/gg/back:h3912kk"' file.yml
или, используя ваше значение $new_commit
:
new_commit='back:h3912kk'
yq -Y --arg new "$new_commit" \
'.services.back.image |=
"index.docker.io/gg/" + $new' file.yml
Обратите внимание, что мы импортируем значение переменной оболочки в выражение, используя --arg
, создавая yq
переменную $new
,вместо того, чтобы вводить его непосредственно в строку выражения. Таким образом мы гарантируем, что значение правильно закодировано с помощью yq
, а также гарантирует, что в нашем коде нет уязвимостей, связанных с внедрением кода.
Или, не упоминая строку index.docker.io/gg/
:
new_commit='back:h3912kk'
yq -Y --arg new "$new_commit" \
'.services.back.image |=
sub("[^/]*$"; "") + $new' file.yml
Или, используя отдельную переменную для репозитория:
new_commit='back:h3912kk'
yq -Y --arg new "$new_commit" --arg repo 'back' \
'.services[$repo].image |=
sub("[^/]*$"; "") + $new' file.yml
Мы также могли бы использовать строку $old_commit
для поиска правильного изображения для замены вместо того, чтобы идти по статическому пути:
old_commit='back:1.0.1'
new_commit='back:h3912kk'
yq -Y --arg old "$old_commit" --arg new "$new_commit" \
'(.services[].image | select(endswith($old))) |=
(rtrimstr($old) + $new)' file.yml
Здесь мы выбираем все.services.*.image
пути, которые заканчиваются любой строкой в $old_commit
, а затем обрезаем ее с конца и заменяем на $new_commit
.
Каждая из приведенных выше команд, учитывая пример документа YAML в вопросе, будет производить
version: '3'
services:
mongo:
container_name: mongo
image: mongo:3.4
volumes:
- /home/mongo_files:/data/db
networks:
my_network: null
back:
container_name: back
image: index.docker.io/gg/back:h3912kk
networks: my_network
networks:
my_network: null
, и вы легко сможете перенаправить вывод в новый файл (или отредактировать документ YAML в месте -с помощью--in-place
).
Инструмент yq
, который вы получаете от snap
, например. Ubuntu отличается, и я обычно использую его для преобразования YAML в JSON (, а затем обратно ):
yq -j e file.yml |
jq '.services.back.image |= "index.docker.io/gg/back:h3912kk"' |
yq -P e
Учитывая пример файла YAML, это дает тот же результат, что и выше. Приведенное выше выражение jq
можно заменить любым из выражений в верхней части этого ответа с той же семантикой.