я в настоящее время использую следующий сценарий, когда я клонирую виртуальные машины. Я использовал ту же технику с середины 90-х, когда я регулярно клонировал debian поля для действия как машины шлюза/брандмауэра для школ.
#! /bin/bash # change hostname of virtual machine from "$1" to "$2" error() { echo "Usage: $0 OldName NewName" >&2 exit 1 } OLD="$1" NEW="$2" [ -z "$OLD" -o -z "$NEW" ] && error find /etc -type f -print0 | \ xargs -0r grep -l "\b$OLD\b" | \ egrep -v 'ssh|\.db' | \ xargs -d "\n" -r sed -i -e "s/$OLD/$NEW/g"
существует несколько ручных изменений также, что я еще не имею вокруг к автоматизации, главным образом потому что я не делаю этого достаточно часто, что стоит провести время для выяснения.
если клонированная машина трудно кодировала IP-адрес (IP-адреса), а не DHCP, я редактирую/etc/network/interfaces.
отредактируйте/etc/udev/rules.d/70-persistent-net.rules так, чтобы имена интерфейса (eth0 и eth1) были присвоены корректным MAC-адресам (иначе, они получат eth2 и eth3, потому что eth0 и eth1 уже определяются).
удалите и повторно создайте ssh ключ хоста.
Хорошо""; заставляет оболочку ожидать команды для окончания и затем продолжает следующую команду.
"И" отправит любой процесс непосредственно в фон и продолжает следующую команду - неважно, если первая законченная команда или будет все еще работать.
Так "и"; не будет работать как Вы, ожидают.
Но на самом деле я не уверен, что Вы ожидаете.
Попробуйте это в своей оболочке:
sleep 2 && echo 1 & echo 2 & sleep 3 && echo 3
это произведет: 2 1 3
Теперь сравните его с
sleep 2 ; echo 1 & echo 2 & sleep 3 ; echo 3
который произведет 1 2 3
С уважением.
command1 & command2
Выполнится command1
, отправьте процесс в фон и сразу начните выполняться command2
, даже если command1
не завершился.
command1 ; command2
Выполнится command1
и затем выполнитесь command2
однажды command1
концы, независимо от ли command1
вышедший успешно.
command1 && command2
только выполнится command2
однажды command1
завершил выполнение успешно. Если command1
сбои, command2
не выполнится.
(... также, для полноты...)
command1 || command2
только выполнится command2
если command1
сбои (выходит с ненулевым кодом выхода.)