Запустите несколько команд, но запустите последнюю в фоновом режиме - PullRequest
0 голосов
/ 11 мая 2018

У меня есть 4 команды, которые я хочу выполнить:

sudo mkdir -p /data/db && \
sudo chmod 755 /data/db && \
sudo chown -R addison.pan: /data && \
mongod &

Я хочу запускать mongod в фоновом режиме только в том случае, если остальные 3, приведенные выше, будут успешными. Но когда я набираю это в bash, он запускается как одна фоновая задача. Как заставить mongod работать только в фоновом режиме, и только если он до него доберется?

Ответы [ 4 ]

0 голосов
/ 11 мая 2018

Вы можете запустить несколько команд в sudo, например:

sudo sh -c 'mkdir -p /data/db && chmod 755 /data/db && chown -R <user>: /data' \
&& mongod &
0 голосов
/ 11 мая 2018

Будьте явным.Нет необходимости пытаться злоупотреблять синтаксисом для использования короткого замыкания:

if \
    sudo mkdir -p /data/db \
    && sudo chmod 755 /data/db \
    && sudo chown -R addison.pan: /data
then
    mongod & 
fi
0 голосов
/ 11 мая 2018

Чтобы запустить одну или несколько команд в отдельном процессе, заключите эту серию команд в скобки. Как указано в спецификации Unix, §2.9.4 «Составные команды» :

( compound-list )

Выполнить составной список в среде подоболочек […]

Чтобы сгруппировать одну или несколько команд в один и тот же процесс оболочки , заключите этот ряд команд в фигурные скобки:

{ compound-list ; }

Выполнить составной список в текущей среде процесса. [...]

Это верно для любой оболочки POSIX (поэтому также работает в Bash ).

Таким образом, ваш пример можно изменить на:

sudo mkdir -p /data/db && \
sudo chmod 755 /data/db && \
sudo chown -R addison.pan: /data && \
( mongod & )

Это может быть хорошо, потому что вы хотите разделить процесс mongod. С другой стороны, более общим ответом было бы сгруппировать список команд в того же самого процесса оболочки:

sudo mkdir -p /data/db && \
sudo chmod 755 /data/db && \
sudo chown -R addison.pan: /data && \
{ mongod & }

Оба они описаны в приведенных выше ссылочных документах.

0 голосов
/ 11 мая 2018

Используйте парены:

sudo mkdir -p /data/db && \
sudo chmod 755 /data/db && \
sudo chown -R addison.pan: /data && \
(mongod &)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...