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

我有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 

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

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

要运行一个shell,你需要类似的东西

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

正如下面的注释所述,因为在首次parsing带有别名的expand_aliases需要处于活动状态,所以需要换行符而不是分号作为第一个和第二个语句分隔符。