Назад | Перейти на главную страницу

Команда Bash для выполнения набора фоновых команд переднего плана

У меня есть 2 команды, которые запускают блокировку ввода в консоли, поэтому их нужно завершить с помощью CTRL + C. Мне не нравится запускать их в фоновом режиме, так как я потерял контроль над прерыванием. Но в противном случае я не могу выполнить их последовательно в однострочном режиме, так как первая команда ожидает завершения до следующего запуска.

В unix для этого должен быть трюк. Я пробую что-то вроде:

$ fg-wrapper infinite-cmd1 & infinite-cmd2
  Executing cmd1 in bg
  Executing cmd2 in bg
(Waiting for CTRL+C to end both)

Я ищу одиночный лайнер, а не скрипт: fg-wrapper - это встроенная команда posix, о которой я мечтал бы привести в качестве примера (я бы не хотел, чтобы ей приходилось писать скрипт)

Попробуй это:

#!/usr/bin/env bash

echo "Executing $1 in bg"
eval $1 &
echo "Executing $2 in bg"
eval $2 &
wait

Пояснение:

$1 и $2 обратитесь к первому и второму аргументу в командной строке. eval выполняет эти команды с & запускать их в фоновом режиме. В заключение, wait ожидает завершения этих команд или их можно завершить с помощью CTRL-C.

Попробуйте этот сценарий с ./script "ping google.com > /dev/null" "ping 127.0.0.1 > /dev/null"