Як виконати кілька команд за допомогою nohup


41

Мені потрібно виконати кілька команд, використовуючи nohup. Кожна команда повинна виконуватися після попередньої команди.

Я використав цю команду як приклад:

nohup wget $url && wget $url2 > /dev/null 2>&1 &

Однак ця команда не спрацювала.

Яку команду я повинен використовувати для цього?

Відповіді:


56

Загорніть його в sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &

1
коли я запускаю nohup, я отримую "nohup: ігнорування введення та перенаправлення stderr на stdout", тож чи не є надлишковим "2> & 1"?
гарнітур

1
Мабуть. Я думаю, що коли я написав відповідь, я просто скопіював її з питання.
jw013

6

Чи не було б набагато простіше створити свій список команд в окремому файлі оболонки, наприклад command.sh, без будь-якого нохупу.

Тоді ви телефонуєте:

nohup bash command.sh

4

Інші вже відповіли о nohup. Як практична сторона: я рекомендую робити такі речі протягом сеансу screenчи tmuxсеансу. Таким чином ви можете відключити, потім знову підключитися і побачити вихідний та кінцевий результат.


1
Ця відповідь чудово підходить для інтерактивних сценаріїв, але не має сенсу для сценаріїв та автоматизації.
Джонатан Хартлі

0

Було б простіше, як це:

nohup sh -c "wget $url && wget $url2" > /dev/null 2>&1 &

Однак це може спричинити проблеми, якщо URL-адреси містять спеціальні символи, тому для більш безпечного варіанту можна використовувати:

nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &

3
Єдиний безпечний спосіб передачі параметрів sh -cздійснюється через окремі аргументи, які можуть бути доступні з допомогою позиційних параметрів ( $0, $1, ...). Немає легкого або простого способу правильно цитувати аргументи для розбору рядків. Ваша спроба використання уникнутих подвійних лапок провалюється, якщо $urlвона містить подвійні лапки. Спробуйте a='problem"'; sh -c "echo \"$a\""самі і подивіться - ви повинні отримати синтаксичну помилку, оскільки sh -cнамагаєтеся запустити echo "problem"".
jw013

@ jw013 Чи не цікаво, чи ваше заперечення стосується прийнятої відповіді від -oh. Вами. Імовірно, ні. Але я не розумію, чому ні! :-)
Джонатан Хартлі

1
@JonathanHartley Я не впевнений, що розумію ваше запитання. Якщо ви ретельно порівнюєте цю відповідь із моєю, ви повинні помітити різницю у способі $urlта $url2використанні.
jw013

@ jw013 Ах, звичайно. Мені було дурно. Дякую за те, що ви поставили мене прямо.
Джонатан Хартлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.