2017-10-10 153 views
0

我有sh文件,如:In React - 如何从.sh(Shell脚本)文件获取值?

echo "Hello" 

,输出:

Hello 

下面是该查询:

我想实现的是,至从.sh文件获取输出,并在 我的反应应用程序中使用它。

...我已经寻找NPM包,但无法找到任何有用的

+0

为节点,您可以使用child_process模块​​来运行你的shell脚本,并保存其输出某些变量 –

+1

@FarhanYaseen,听起来很有趣 –

+0

https://nodejs.org/api /child_process.html这里是完整的细节 –

回答

0

我想你应该把输出到任何文件(echo $var > $destdir或使用sed),通过使用和的NodeJS例如通过值读取该文件ajax请求作出反应。

+0

是的,但为此我需要运行该文件,对不对? –

1

假设你不在Windows机器上,可以编写简单的Node Express服务器,它可以接收GET请求,然后使用Node内置的child_process.exec()执行shell脚本,然后发送包含stdout的响应,在这种情况下,将是你的shell脚本的输出 - “你好”

服务器的代码。 “静态”文件夹中包含的index.html和index.js,去年的代码是下面这个样子:

客户端(你也可以环绕该代码反应,因为你唯一需要的是一个由XHR
const express = require('express') 
const { exec } = require('child_process') 
const { join } = require('path') 

const port = process.env.PORT || 24587 
const app = express() 

app.use(express.static(join(__dirname, 'static'))) 

app.get('/hello', (req, res) => { 
    exec(join(__dirname, 'hello.sh'), (err, stdout, stderr) => { 
    if (err) { 
     return res.status(400).json({ output: null, error: err.message }) 
    } 

    res.status(200).json({ output: stdout, error: null }) 
    }) 
}) 

app.listen(port,() => { 
    console.log('server listening on port', port) 
}) 

示例代码这里的fetch帮助):

const btn = document.querySelector('#btn') // <button id="btn">get</button> 
const result = document.querySelector('#result') // <div id="result"></div> 

btn.addEventListener('click',() => { 
    if (self.fetch) { 
    fetch('/hello') 
     .then(res => res.json()) 
     .then(data => { 
     result.innerText = data.output 
     }) 
     .catch(data => { 
     result.innerText = data.error 
     }) 
    } 
}) 
+0

是的,我认为这会起作用,但我不想打电话给任何XHR,有什么想法? –

+0

@VivekDoshi你想直接从React调用shell脚本? – vanelizarov

+0

@VivekDoshi我想说,你不能在浏览器中评估除JavaScript之外的任何东西。当然,你可以在客户端加载shell脚本文件,这意味着你需要向本地文件发出AJAX请求,然后写入f.e.正则表达式从该文件中提取所有以'echo'开头的行,然后解析这些行以获得种类的占位符 – vanelizarov

相关问题