Unix, отдельный несколько команд, который имеет '&' (выполняются в фоне) в конце

я в настоящее время использую следующий сценарий, когда я клонирую виртуальные машины. Я использовал ту же технику с середины 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"

существует несколько ручных изменений также, что я еще не имею вокруг к автоматизации, главным образом потому что я не делаю этого достаточно часто, что стоит провести время для выяснения.

  1. если клонированная машина трудно кодировала IP-адрес (IP-адреса), а не DHCP, я редактирую/etc/network/interfaces.

  2. отредактируйте/etc/udev/rules.d/70-persistent-net.rules так, чтобы имена интерфейса (eth0 и eth1) были присвоены корректным MAC-адресам (иначе, они получат eth2 и eth3, потому что eth0 и eth1 уже определяются).

  3. удалите и повторно создайте ssh ключ хоста.

4
задан 7 November 2010 в 05:09
2 ответа

Хорошо""; заставляет оболочку ожидать команды для окончания и затем продолжает следующую команду.

"И" отправит любой процесс непосредственно в фон и продолжает следующую команду - неважно, если первая законченная команда или будет все еще работать.

Так "и"; не будет работать как Вы, ожидают.

Но на самом деле я не уверен, что Вы ожидаете.

Попробуйте это в своей оболочке:

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

С уважением.

12
ответ дан 3 December 2019 в 02:17

command1 & command2 Выполнится command1, отправьте процесс в фон и сразу начните выполняться command2, даже если command1 не завершился.

command1 ; command2 Выполнится command1 и затем выполнитесь command2 однажды command1 концы, независимо от ли command1 вышедший успешно.

command1 && command2 только выполнится command2 однажды command1 завершил выполнение успешно. Если command1 сбои, command2 не выполнится.

(... также, для полноты...)

command1 || command2 только выполнится command2 если command1 сбои (выходит с ненулевым кодом выхода.)

14
ответ дан 3 December 2019 в 02:17

Теги

Похожие вопросы