问题 使用Node.js编写Shell脚本


我想知道是否有任何节点框架或节点库可用于编写shell脚本?例如,我有bash shell程序来安装Graphite和OpenTSDB RRD工具,我想用node.js来实现它,有可能吗?

谢谢


8624
2017-10-17 17:35


起源



答案:


看一眼 shelljs  - 它实现了shell和gnu coreutils类似的功能。 与coffeescript一起,它看起来非常类似于shell脚本:

if not which 'git'
  echo 'Sorry, this script requires git'
  exit 1

# Copy files to release dir
mkdir '-p', 'out/Release'
cp '-R', 'stuff/*', 'out/Release'

# Replace macros in each .js file
cd 'lib'
for file in ls '*.js'
  sed '-i', 'BUILD_VERSION', 'v0.1.2', file
  sed '-i', /.*REMOVE_THIS_LINE.*\n/, '', file
  sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat 'macro.js', file
cd '..'

# Run external tool synchronously
if (exec 'git commit -am "Auto-commit"').code != 0
  echo 'Error: Git commit failed'
  exit 1

9
2017-10-18 02:09



谢谢@Andrey Sidorov,看起来很有前途,我打算试试这个lib。 - Nam Nguyen


答案:


看一眼 shelljs  - 它实现了shell和gnu coreutils类似的功能。 与coffeescript一起,它看起来非常类似于shell脚本:

if not which 'git'
  echo 'Sorry, this script requires git'
  exit 1

# Copy files to release dir
mkdir '-p', 'out/Release'
cp '-R', 'stuff/*', 'out/Release'

# Replace macros in each .js file
cd 'lib'
for file in ls '*.js'
  sed '-i', 'BUILD_VERSION', 'v0.1.2', file
  sed '-i', /.*REMOVE_THIS_LINE.*\n/, '', file
  sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat 'macro.js', file
cd '..'

# Run external tool synchronously
if (exec 'git commit -am "Auto-commit"').code != 0
  echo 'Error: Git commit failed'
  exit 1

9
2017-10-18 02:09



谢谢@Andrey Sidorov,看起来很有前途,我打算试试这个lib。 - Nam Nguyen


你应该看看 咕噜 这是一个帮助人们在node.js中编写构建和其他脚本的工具包。有很多插件可以帮助您轻松完成有趣的事情。

话虽如此,如果你知道Bash,我只会坚持使用bash。

看看这个 Twitter上关于Bash vs. Grunt脚本的有趣线程

我用什么Grunt

  • 运行Lint工具
  • 运行JS单元测试
  • 运行预处理器(sass,require.js,uglify等)

我用Capistrano的* 对于

  • 将代码部署到生产环境

我用什么Bash** 对于

  • 设置服务器并运行它们等

  • *  Capistrano的 + git或 厨师 管他呢
  • ** bash或您想要使用的任何其他工具

3
2017-10-17 18:02



如果我已经知道Bash,你能解释一下为什么你会坚持使用bash吗?使用bash而不是grunt有什么好处吗? - Nam Nguyen
1.在bash中异步javascript中执行二进制程序的难度要大得多。 2. Grunt / node.js仍然是1.0之前的版本,并且有更改的API(比节点更多)3。Bash是许多系统上可用的通用工具,而node.js和grunt不太可能安装在许多系统上。 - Jamund Ferguson
搬运工人 docker.com 尽管如此,还是减少了很多。 (**和*) - Quickredfox


有许多,其中最受欢迎的是 commander

npm install --save commander

然后编写命令非常简单:

#!/usr/bin/env node

var program = require('commander');

program
  .version('0.0.1')
  .option('-f, --foo', 'enable some foo')
  .option('-b, --bar', 'enable some bar')
  .option('-B, --baz', 'enable some baz');

program.on('--foo', function(){
  console.log('Stuff!');
});

1
2017-10-17 17:41



这不是我想要的。我正在寻找一个可以帮助我编写shell脚本的节点框架。例如:我用bash编写了这个脚本 github.com/gdbtek/setup-graphite/blob/master/ubuntu.bash 我想在节点中做这个。如果使用Node.js太多了,我认为留在bash脚本中会更好。 - Nam Nguyen