Неблокуюча команда 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 та подібних оболонках термінологія (і функція!) Досить інша.


Дякую тобі! це пояснює, чому я отримував лише файли та результати пошуку в Google: D
Plante

Моє враження, що Планте хоче впливати на сценарій ззовні, виконувати кожну операцію у фоновому режимі, а не переписувати сценарій.
користувач невідомий

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

Саме це мені і потрібно, ще раз дякую. працює чудово поки що!
Plante
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.