我有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
所以我的问题是:如何从文件加载自定义别名并能够在节点脚本中使用它们?
答案 0 :(得分:4)
我不相信你做的是理智的事情(如果你真的这样做,函数可能比别名更好),但问题是你运行了四个独立的shell,每个shell都会退出并失去任何状态你创造了。
要运行单个shell,您需要类似
的内容shell.exec('shopt -s expand_aliases \n . my_custom_aliases \n alias foo; foo',
{shell: '/bin/bash'});
如下面的评论中所述,因为首次解析带别名的行时{}需要处于活动状态,所以需要换行而不是分号作为第一个和第二个语句分隔符。