如何在NodeJS脚本中加载自定义bash别名?

时间:2016-06-15 13:17:41

标签: node.js bash alias

我有bash脚本

#!/bin/bash
shopt -s expand_aliases
. my_custom_aliases # load aliases
alias foo # show alias definition
foo # run alias

它按我的意愿工作

$ ./alias.sh 
alias foo='echo barrr'
barrr

但现在我想在nodejs脚本中做同样的事情。

我尝试使用ShellJS软件包

#! /usr/bin/env node
var shell = require("shelljs");
shell.exec('shopt -s expand_aliases', {shell: '/bin/bash'});
shell.exec('. my_custom_aliases', {shell: '/bin/bash'});
shell.exec('alias foo', {shell: '/bin/bash'});
shell.exec('foo', {shell: '/bin/bash'});

my_custom_aliases显然位于同一目录中)

但它只是向我投掷

$ node am.js 
/bin/bash: line 0: alias: foo: not found
/bin/bash: foo: command not found

所以我的问题是:如何从文件加载自定义别名并能够在节点脚本中使用它们?

1 个答案:

答案 0 :(得分:4)

我不相信你做的是理智的事情(如果你真的这样做,函数可能比别名更好),但问题是你运行了四个独立的shell,每个shell都会退出并失去任何状态你创造了。

要运行单个shell,您需要类似

的内容
shell.exec('shopt -s expand_aliases \n . my_custom_aliases \n alias foo; foo',
  {shell: '/bin/bash'});

如下面的评论中所述,因为首次解析带别名的行时{}需要处于活动状态,所以需要换行而不是分号作为第一个和第二个语句分隔符。