gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:52:27 26 4
gpt4 key购买 nike

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

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

最佳答案

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

要运行单个 shell,您需要类似的东西

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

正如下面评论中所述,由于首次解析带有别名的行时 expand_aliases 需要处于事件状态,因此您需要换行符而不是分号作为第一个和第二个语句分隔符。

关于node.js - 如何在 NodeJS 脚本中加载自定义 bash 别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37836622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com