Это может быть сделано следующим образом:
echo 'echo hi' | bash
очень удобно на самом деле, потому что вам не нужно записывать файлы из на файловой системе; не нужно создавать .sh-файл и запускать его, а затем удалять файл после запуска.
Для использования с Node.js, вы бы запустить его следующим образом:
const cp = require('child_process');
const bashCmd = 'echo "echo hello world" | bash';
cp.exec(bashCmd, function (err, stdout, stderr) {
if (err) {
console.error(err.stack);
}
console.log(stdout);
console.error(stderr);
process.exit(0);
});
В настоящее время я использую это для генерации отчетов покрытия стамбульских для наших тестов. Следующий код:
var bash = 'echo "';
const $files = sumanUtils.removeSharedRootPath(files);
$files.forEach(function (file) {
bash += 'istanbul cover ' + file[0] + ' --dir ./coverage/' + String(file[1]).replace(/\//g,'-') + '\n';
});
bash += 'istanbul report" | bash';
console.log(bash);
cp.exec(bash, function (err, stdout, stderr) {
if (err) {
console.error(err.stack);
process.exit(1);
}
console.log(stdout);
console.error(stderr);
process.exit(0);
});
формирует команду Баша, которая выглядит следующим образом:
echo "istanbul cover /Users/amills001c/WebstormProjects/oresoftware/suman/test/build-tests/empty.js --dir ./coverage/empty.js
istanbul cover /Users/amills001c/WebstormProjects/oresoftware/suman/test/build-tests/test6.js --dir ./coverage/test6.js
istanbul cover /Users/amills001c/WebstormProjects/oresoftware/suman/test/build-tests/test7-start.js --dir ./coverage/test7-start.js
istanbul cover /Users/amills001c/WebstormProjects/oresoftware/suman/test/build-tests/test8.js --dir ./coverage/test8.js
istanbul cover /Users/amills001c/WebstormProjects/oresoftware/suman/test/build-tests/test9.js --dir ./coverage/test9.js
istanbul report" | bash
Очень интересный вопрос, но я думаю, что это будет трудно сделать. Вы все еще собираетесь использовать/bin/bash в качестве интерпретатора? – Dandorid
Да, я бы использовал bash для запуска скрипта. Причина, по которой я спрашиваю, заключается в том, что это всего лишь временный файл, который будет перезаписан, потому что контент динамический, в основном список последовательных задач. Поэтому нет необходимости сохранять файл в файловой системе, если я могу избежать его загромождения. –
добавил ответ, дайте мне знать, если вы считаете, что это здорово –