Вот рабочее решение для него (протестировано RHEL 7):
$ export test1='git --git-dir'
$ export test2='my-folder/.git/ add Steps-to-follow.txt'
$ #; git --git-dir'
$ export test3='my-folder/.git/ commit'
$ export git1=$test1=$test2
$ export git2=$test1=$test3
$ $git1
$ $git2
Это будет работать. Я не могу сказать, что это самое оптимальное решение, однако оно работает так, как мне нужно, и оно может понадобиться. && или ; (для запуска нескольких команд с использованием one env. var.) не сработало у меня так, как я ожидал, и поэтому я перешел на это приемлемое решение на данный момент. Если кто-то предложит что-то лучшее или улучшенное, прокомментируйте.
После проб и ошибок я реализовал это решение.
Я прикрепил свой скрипт к systemd
сервису:
[Unit]
Description=Make VMs reachable from the internet
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/home/…/virbr0-enable.sh
[Install]
Alias=makeVMvisible.service
WantedBy=multi-user.target
Я заставил его ждать, пока сеть не заработает (после network -online.target ), которая, как я полагаю, сама зависит от firewalld.service , а также после multi -user.target достигнут. Последнее может быть излишним (, потому что я не знаю точных отношений зависимости между целями и сервисами ), но это не повредит.
Таким образом, это все еще не работало. Служба systemd не была неисправна, потому что руководство systemctl start makeVMvisible.service
переводило виртуальный мост в режим сквозной передачи. Задержка кажется необходимой. :Я добавил команду sleep
в начало скрипта.
Экспериментально установлено, что пороговое значение задержки составляет от 1 до 2 секунд. Я выбрал sleep 5
, что не имеет большого значения в прошедшем времени и довольно консервативно.
Однако я не нахожу свое решение очень удовлетворительным. Кто-нибудь знает о лучшей зависимости, чем network -online.target ?
Можно ли подключиться к виртуальной машине с хоста до того, как ей будет передан внешний IP-адрес? Если это так, то вы можете использовать удаленную функцию systemctl
для проверки состояния загрузки виртуальной машины.
Для этого необходимо, чтобы виртуальная машина была доступна с помощью ключа ssh с хоста.
На хосте, который вы запустите:
systemctl -H <vm name or ip> --quiet is-active multi-user.target
Выполняется успешно, если указанный блок активен.
Таким образом, в bash вы можете сделать что-то вроде:
until systemctl -H <vm name or ip> --quiet is-active multi-user.target; do
sleep 5
done
Теперь это не будет продолжаться до тех пор, пока именованное устройство на данном хосте не будет включено.