Неблокирующая команда 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.