2016-07-29 8 views
1

Есть ли способ в node.js развернуть новый процесс и запустить несколько команд оболочки терминала и выполнить функции node.js, такие как fs.writeFileSync, из того же процесса/контекста.Выполнение нескольких команд из того же самого дочернего процесса node.js

В качестве примера я хочу сделать следующее. Выполните все ниже в том же процессе.

exec("git worktree add -b"....); 
exec("cd ../"); 
writeFileSync(...); 

Это express.js applcation, и потому, что несколько пользователей будет доступ к той же файловой системы, в то же время и выполняя GIT действия на том же репо, я хочу, чтобы избежать конфликтов при порождении нового процесса для каждого один.

+0

Думаете ли вы, что все эти команды были включены в один сценарий? –

+0

@JuanStiza Не знаете, как я буду запускать writeFileSync. Думаю, мне пришлось бы поместить это в другой js-файл и вызвать его из другой команды оболочки? – Alex

ответ

-1

Отделите его от главного концентратора, который называет его детьми. Эти дети преподают любые записи/сбережения, которые вам нужны для многопоточности.

Просто выполните родительский звонок exec("node myWritingChild.js");, когда ему нужно сделать один из этих потоков.

Обращаем ваше внимание: обычно лучше запустить ребенка, разрешив его открыть через трубу/разветвив ее. Есть many postings об этом, так что посмотрите, если хотите. Также ознакомьтесь с этими docs.

+0

Спасибо за это. Кажется, что это частично работает. Я поместил все команды в отдельный файл js и использовал команду exec для их запуска, однако похоже, что основная ветвь writeFileSync изменяет, а не новую ветвь, созданную двумя другими командами. Я бы ожидал, так как команды «git worktree add ...» и «cd ../branch» находятся в одном процессе с writeFileSync, чтобы сделать наоборот. – Alex

+0

@Alex Попытка написать один файл из нескольких источников может вызвать проблемы. Убедитесь, что у каждого автора есть правильное разрешение и он не мешает. Кроме того, у вас есть один процесс записи/дочерний процесс, чтобы все данные о очереди на детскую трубку, если у вас по-прежнему возникают проблемы. – Anselm

+0

сейчас работает. Проблема заключалась в том, что «git worktree add -b» создает новый путь, и я случайно писал старый. Помещая все в новый js-файл и работающий exec, похоже, работает как ожидалось. – Alex

Смежные вопросы