Intereting Posts
Получение идентификатора процесса родительского процесса из дочернего процесса Иногда вентилятор процессора не запускается Как проследить процесс для оригинального пользователя? Как скопировать домашний каталог в домашний каталог? Как получить (только) http-статус сайта в сценарии оболочки? Использование удаленного XServer Временное управление оболочкой Создать мигающий текст с эхо-символами Как сделать снимок экрана определенной области экрана из командной строки? Создание grub.cfg без установленной Linux Как настроить Kate для использования Nautilus в качестве файлового менеджера? Что-то не так с моим скриптом или Bash намного медленнее, чем Python? Создавать списки номеров страниц для двухсторонней двусторонней печати: 2,3, … и 1,4, … Bash не находит программу, даже если она на моем пути скрипт, в котором перечислены все файлы в каталоге и подкаталогах, отсортированных по размеру, перечисляя только имена файлов, а не полные пути

Выполнить команду в фоновом режиме, которая устанавливает функцию env var или define

> export foo=1 & [1] 9016 [1] + done export foo=1 > echo $foo > 

Я знаю, что при запуске команды с & вы создаете новый процесс, а export foo=1 не устанавливает env vars в родительской оболочке. Однако, это выполнимо?

Говоря конкретно, я разрабатываю Node и множество пакетов, таких как запуск js-команд и завершение установки на лету, например grunt и gulp. Это слишком медленно.

Я думаю о том, чтобы сделать утилиту похожей на autoenv . Когда вы вводите каталог, он запускает команды js и устанавливает завершение в фоновом режиме и повторно Gruntfile.js gulpfile.js изменении Gruntfile.js или gulpfile.js и т. Д.

Итак, как я могу запускать команду асинхронно, и когда она заканчивается, определяет env vars & functions для меня?

Строго говоря, то, что вы хотите сделать, невозможно. Итак, вопрос в том, сколько вы должны обманывать, чтобы вытащить что-то подобное? Вам нужны bash, PROMPT_COMMAND и два временных файла. вам также придется принять, что оболочка не будет обновлена ​​до команды после завершения фоновой задачи. Я также рекомендовал бы использовать make в фоновом процессе, чтобы длительная задача выполнялась по мере необходимости.

Сначала настройте свой крючок событий:

 PROMPT_COMMAND='[[ -e file2 ]] && { . file2; rm file2 }' 

затем запустите фоновый процесс

 (echo export foo=1 > file1 && mv file1 file2 )& 

Почему mv ? Присутствие файла2 указывает, что задача завершена, и что файл может быть проанализирован, так что вы можете взять свой сладкий файл time1 времени.