от
Я столкнулся с какой-то странной ошибкой. Я работаю над интерфейсом механизма запросов, где пользователь должен задавать запросы в форме (Sub, Pred, Obj), где Sub, Pred и Obj - ресурсы (как в RDF). Если пользователь хочет получить совпадающий Sub с данными Pred и Obj, он запросит (?, Pred, Obj). Так, ? указывает, что пользователь хочет получить в качестве вывода (мы можем иметь несколько?). Сейчас на моей веб-странице я перепробовал все 8 комбинаций, но только 1 не отображает вывод. Это сочетание (?, Что-то?) У меня есть скрипт bash, который при нажатии кнопки вызывает мой код C (т.е. мой механизм запросов) с правильным форматом запроса. Он сохраняет результаты запроса в файле. Теперь другая команда в скрипте запускает другую команду bash, которая создает веб-страницу, которая содержит каждую строку вывода в виде неупорядоченного списка. Теперь, когда я задаю проблемный запрос (то есть (?, Something,?)), Файл содержит правильный вывод, но скрипт bash не создает правильную веб-страницу.
//BashScript (create_q_out_list.sh) to create the web

// JavaScript file that calls the above script and my querying engine to
// generate web

В приведенном выше коде temp это файл, который содержит выходные данные. Кроме того, q_out_list.html - это веб-страница, которая должна создаваться как результат запуска create_q_out_list.sh.
Теперь оба сценария работают хорошо для всех комбинаций, кроме той, что я описал выше. Но для этой комбинации механизм запросов по-прежнему дает правильный вывод, то есть временный файл содержит правильный вывод. Но сгенерированная веб-страница не имеет никакой информации о временном файле.
    

        

Пожалуйста, войдите или зарегистрируйтесь для публикации ответа на этот вопрос.

2 Ответы

0 голосов
от
Ваш код JavaScript не ожидает завершения первого
exec
, прежде чем продолжить вызов
bash
. Есть несколько способов исправить это: Вместо этого используйте
execSync
- это легко, но заблокирует процесс Node.js во время выполнения ваших подпроцессов Поместите второй вызов
exec()
в первый обратный вызов
exec()
(пример 1 ниже) Используйте
async
/
await
и обещанный
exec()
- это чище и приятнее (пример 2 ниже - с другими модернизациями тоже). Пример 1
var exec = require("child_process").exec;
function query(type, sub, pred, obj) {
  if (type === "Search")
    str = './search "
0 голосов
от
В операторе
read
отсутствует флаг
 для предотвращения расширения его содержимого.

#!/usr/bin/env bash

# create_q_out_list.sh to create the web
    
...