别名的 NodeJS spawn 进程

问题描述 投票:0回答:1

我正在尝试从 nodejs 生成一个进程,从 child_process 生成。 但是我尝试运行的命令是运行用户的 .bashrc 文件中的别名。

// index.ts or whatever
import { spawn } from "child_process";

spawn('cmdAlias', [args], {
  env: process.env,
  stdio: 'inherit',
  shell: '/bin/bash'
});

// .bashrc
[...]
alias cmdAlias='echo foo'

这不起作用,它抛出一个命令未找到(cmdAlias)。

如果我尝试通过运行手动重新配置 bash:

// index.ts or whatever
import { spawn } from "child_process";

spawn('source $HOME/.bashrc; cmdAlias', [args], {
  env: process.env,
  stdio: 'inherit',
  shell: '/bin/bash'
});

然后我得到 source command not found!

有一种方法可以生成一个加载了别名的进程吗?

(注意别名来自终端,这是给定的)

PS:这里的例子过于简单了

node.js bash alias spawn
1个回答
0
投票

我在我的操作系统上尝试了这些步骤并且成功了:

  1. 执行
    nano ~/.bashrc
  2. 添加
    alias cmdAlias='echo foo'
    .bashrc
  3. 现在找到您的项目并在那里创建这两个文件
// ./cmdAliasWrapper
#!/bin/bash
echo "Running cmdAliasWrapper.sh"
bash -i -c "cmdAlias $*"
exit 1
// ./test.js
const spawn = require('child_process').spawn;

const args = [
    "echo 'This ran from test.js'"
];

spawn('./cmdAliasWrapper.sh', args, {
    env: process.env,
    stdio: 'inherit',
    shell: '/bin/bash'
  });
  1. 执行
    chmod +x ./cmdAliasWrapper.sh
  2. 最后
    node ./test.js

现在你应该在你的控制台上看到这个:

Running cmdAliasWrapper.sh
echo foo This ran from test.js
© www.soinside.com 2019 - 2024. All rights reserved.