Неблокирующая команда bash


11

Допустим, у меня есть скрипт bash со следующим:

#!/bin/sh
gedit
rm *.temp

Когда я выполняю его с помощью sh ./test.sh, geditвсплывающее окно, но rmчасть не запускается, пока я не закрою gedit.

Я хочу, чтобы скрипт продолжал работать, даже если geditон не закрыт; как geditне блокирует выполнение Bash.

Пример, который я привел, является лишь примером (установка rmпервого не будет работать в реальной ситуации).

Ответы:


25

Термин, который вы ищете, называется "задним фоном" работы. Когда вы запускаете команду в своей оболочке или в скрипте, вы можете добавить флаг в конце, чтобы отправить его в фоновый режим и продолжить выполнение новых команд или остальной части скрипта. В большинстве оболочек, в том числе sh, это &персонаж.

#!/bin/sh
gedit &
rm ./*.temp

Таким образом, оболочка не ожидает завершения и того geditи другого rmи geditбудет работать одновременно.

Термин «блокировка» обычно относится к потокам ввода / вывода, часто к файлам или устройству. Он также используется в скомпилированных языках в том же смысле, что и вы, но в bash и аналогичных сценариях оболочки терминология (и функция!) Несколько иная.


благодарю вас! это объясняет, почему я получаю только fifo и ввод результатов в Google: D
— Plante

У меня сложилось впечатление, что Plante хочет влиять на сценарий извне, выполнять каждую операцию в фоновом режиме, а не переписывать сценарий.
— пользователь неизвестен

@user: Мне потребовалось пару чтений, чтобы даже догадаться, чего он хотел. Может быть, вы могли бы прокомментировать вопрос для уточнения.
— Калеб

Это именно то, что мне было нужно, еще раз спасибо. отлично работает до сих пор!
— Plante
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.