在React中 - 如何从.sh(Shell脚本)文件中获取值?

时间:2017-10-10 07:12:08

标签: javascript node.js reactjs sh

我有.sh文件,如:

echo "Hello"

哪个输出:

Hello

以下是查询:

  

我想要实现的是从.sh文件获取输出并使用它   我的反应。

我搜索过npm包但找不到任何有用的

2 个答案:

答案 0 :(得分:1)

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

服务器代码。 '静态'文件夹包含index.html和index.js,last的代码在此下面:

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)
})

客户端的示例代码(您也可以将React包装在此代码周围,因为您唯一需要的是在fetch的帮助下在此处创建的XHR):

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
      })
  }
})

答案 1 :(得分:0)

我认为您应该将输出放到任何文件(echo $var > $destdir或使用sed),使用nodejs读取此文件,例如通过ajax请求传递值进行反应。