我正在尝试从 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:这里的例子过于简单了
我在我的操作系统上尝试了这些步骤并且成功了:
nano ~/.bashrc
alias cmdAlias='echo foo'
到.bashrc
// ./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'
});
chmod +x ./cmdAliasWrapper.sh
node ./test.js
现在你应该在你的控制台上看到这个:
Running cmdAliasWrapper.sh
echo foo This ran from test.js