如何在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
需要处于活动状态,所以需要换行符而不是分号作为第一个和第二个语句分隔符。