Как спланировать выполнение задачи после другой уже запущенной задачи в bash? [дубликат]

Шестнадцатеричный дамп показывает, что в имени есть только пробелы ( 20 ), но есть также пробелы после вторая часть. Поэтому вам нужно сделать что-то вроде

xinput map-to-output "Weida Hi-Tech                CoolTouchR System           " DP-4

(надеюсь, я правильно подсчитал; если нет, проверьте количество пробелов самостоятельно).

12
15.12.2018, 03:14
5 ответов

Обычно я делаю это:Ctrl + Zfg && command2

  1. Ctrl + Z , чтобы приостановить его и позволить вам ввести больше в оболочке.
  2. Опционально bg, чтобы возобновить выполнение команды 1 в фоновом режиме, пока вы вводите команду 2.
  3. fg && command2чтобы возобновить выполнение команды 1 на переднем плане и затем поставить в очередь команду 2, если команда 1 выполнена успешно. Вы, конечно, можете заменить ;или ||на &&, если хотите.
30
27.01.2020, 19:54

Стандартный способ — просто запустить команду 1 в фоновом режиме, а затем запустить команду 2 либо в фоновом, либо на переднем плане. Полная команда такова:

command1 & command2

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

.
command1 &

И это правильный синтаксис для запуска обеих команд в фоновом режиме:

command1 & command2 &
0
27.01.2020, 19:54

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

  • Предполагая, что вы уже запускаете command1 в терминале (, назовем его terminal1)
  • Запустить новый терминал (назовем его терминал2)
  • Найдите идентификатор процесса command1 (назовем его command1 _pid ). В терминале 2 запустите команду ps -ef | grep <command1>(. Возможно, вы захотите правильно сформировать строку фильтра в команде grep, чтобы случайно не найти другой процесс, имеющий в качестве подстроки ).
  • Команда «Пуск»wait <command1_pid> ; command2

По сути, waitпредставляет собой команду bash, встроенную -в команду, которая ожидает выхода из предоставленных PID, а затем возвращается. Вы просто делегируете свое ожидание завершения command1 команде bash wait.

-3
27.01.2020, 19:54
  1. запустить команду

    command1
    
  2. приостановить выполнение, нажав Ctrl + Z

  3. найти номер задания приостановленной команды (обычно он уже выводится на консоль, когда на консоль, когда команда приостановлена ​​), выполнив

    jobs
    
  4. пусть command1продолжить в фоновом режиме

    bg
    
  5. запланировать выполнение command2до завершенияcommand1

    wait -n <command1 job number> ; command2
    

Документация Встроенные функции управления заданиями

22
27.01.2020, 19:54

Есть несколько альтернатив.

  • С одним амперсандом , «отправить в фоновый режим», вторая программа запускается после запуска первой, но они, вероятно, будут работать параллельно друг с другом.

    command1 & command2
    
  • С двумя амперсандами , «логическим и», вторая программа запустится только в случае успешного завершения первой программы.

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

    command1 ; command2
    
  • Вы можете использоватьwait <PID>для ожидания завершения первой команды, если она уже выполняется из той же оболочки (в том же окне терминала ).

  • В противном случае, если первая команда уже выполняется из другой оболочки (в другом окне ), вы можете использовать небольшой цикл while, используя ps, чтобы проверить, найден ли PID с помощьюps. Когда он больше не будет найден, будет запущена вторая команда.

    В этом демонстрационном примере для bashпроверяется, работает ли topчерез PID, и выполняется команда

    echo "*** $USER, I am ready now ***"
    

    если/когда topбольше не работает.

    pid=$(ps -A|grep top|cut -d ' ' -f 1); \
    while [ "$pid" != "" ]; do ps -A|grep "$pid" > /dev/null; \
    if [ $? -eq 0 ]; then sleep 5;else pid=""; fi; done; \
    echo "*** $USER, I am ready now ***"
    
8
27.01.2020, 19:54

Теги

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