Команды очереди при выполнении одной команды

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

Я знаю, что есть возможность нажать Ctrl + Z, а затем отправить fg && otherCommand . Однако это имеет два основных недостатка:

  1. Он не работает, если первая команда представляет собой композицию из разных команд ( command1 && command2 или command1; command2 ), потому что последующие команды первой переданной строки не выполняются.
  2. Выполнение первой команды останавливается при вводе следующей команды. С этими неприятными 30-секундными командами время, затрачиваемое на ввод следующей команды, составляет значительную часть оставшегося времени выполнения, если не все.

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

  1. Это не работает, если команда, которую вы выполняете, сначала читает из stdin .
  2. Если команда, которую вы выполняете, сначала производит вывод, вы не можете видеть, что вы ввели.

Есть ли быстрый способ поставить в очередь больше команд во время выполнения одной команды, возможно, используя специальный эмулятор терминала или несколько терминалов?

  • Проверьте, является ли файл текстовым файлом в bash
  • Как передать переменную в команде в UNIX?
  • Как объединить два файла в соответствующую строку?
  • Запустить команду на одноименные файлы из нескольких каталогов
  • Получить список разделенных запятыми списков объектов в каталоге?
  • Как извлечь размер файла с помощью du
  • Количество вхождений букв в слово?
  • Является ли `~ / Documents` относительным или абсолютным путем?
  • 3 Solutions collect form web for “Команды очереди при выполнении одной команды”

    Вы, скорее всего, хотите:

    wait $pid

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

    Предполагая, что вы не можете открыть второй терминал / соединение, вы можете запустить сеанс в терминальном мультиплексоре, таком как screen или tmux .

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

    Это также помогает сохранить сессию (ы) в живых, если соединение / эмулятор прерывается по какой-либо причине.

    Нажмите Ctrl + Z и сразу запустите bg . Это заставляет текущую команду продолжать работать в фоновом режиме. Затем вы можете использовать fg && otherCommand для планирования otherCommand после текущей.

    Чтобы сделать это проще, я сконфигурировал Ctrl + Z в своей оболочке, чтобы запустить bg когда я нажимаю его на пустой командной строке. См. В zsh, как я могу быстрее отказаться от процесса переднего плана? и Как отправить приложения командной строки прямо на задний план? ; Я не проверял, позволяют ли современные версии bash сделать то же самое.

    Linux и Unix - лучшая ОС в мире.