通过编程方式启动一个子进程,临时更改用户python命令的指向。
所以我想到了别名方式。想临时覆盖用户原有的python命令
$ alias python=python2;python --version
显示python ,找不到该命令。
不关闭shell,下一行输入lll ,别名是可以生效的。
但是 并不能做到我一条命令临时覆盖lll的命令。
import * as child from 'child_process'
export async function execRequest(cmd: string, commands: string[]) {
return new Promise((resolve) => {
let spawnChild = child.spawn(cmd)
spawnChild.stdout.on('data', ch => {
console.log(ch.toString().trim())
})
spawnChild.stderr.on('data', ch => {
console.log(ch.toString().trim())
})
spawnChild.on('exit', code => {
console.log(code)
})
commands.forEach((command) => {
spawnChild.stdin.write(`${command}\n`)
})
spawnChild.stdin.end('\nexit\n')
})
}
await execRequest('bash',['alias python233=python2','python233 --version 2>&1'])
以上代码 大概意思是,输入bash,并开启交互式shell
第一次流写入alias python233=python2 并且回车
第二次流写入python233 --version 2>&1 并且回车
输出流提示
提示python233不存在
PS: python --version竟然输出到错误流 真离谱
Bash 手册里,Alias 条目说:
大意:
另外,你的
ls -ll
需要用引号括起来,否则-ll
不是lll
的一部分,而是成为alias
的参数。如: