У меня есть программа, которая вызывает сценарий, который выводит информацию о ходе выполнения в виде разделенного переносом строки вывода с префиксом в JSON для файлового дескриптора номер 3:
use std::process::Command;
fn main() {
let out = Command::new("bash")
.arg("test.sh")
.output()
.expect("failed to execute install command");
}
#!/bin/bash
while sleep 1s; do # random progress emulator
echo "@progress {\"key\": \"value\"}" >&3
done
Ничего найденный предоставил любой хороший пример того, как на самом деле к этому.
* JavaScript эквивалент будет:
#!/usr/bin/env node
const cp = require('child_process')
const p = cp.spawn('bash', [ 'test.sh' ], { stdio: [ 'pipe', 'inherit', 'inherit', /* 3 */ 'pipe' ] })
const readline = require('readline')
const rl = readline.createInterface({
input: p.stdio[3]
})
rl.on('line', (line) => console.log(JSON.parse(line.substr(10))))