我们有一个 Windows NodeJS 进程,它必须通过 WSL 调用一些 Linux 命令。在正常的 WSL bash 会话中,我们只会一个接一个地执行这些命令:
user@pc:/mnt/c/Users/user$ command1 args1
user@pc:/mnt/c/Users/user$ command2 args2
但是,当通过 wsl command1 args1
和 wsl command2 args2
调用 WSL 时,第一次调用的结果不会影响第二次调用。这是两个会话,而不是一个。
我是这样试的:第一个命令是 virtualenv
activate
调用,第二个是执行 Python 脚本:
import { child_process } from 'mz';
child_process.spawn('wsl', ['source /path/to/virtualenv/env/bin/activate', 'which python'])
不起作用,因为两个参数都被解释为一个命令 (source /path/to/virtualenv/env/bin/activate: No such file or directory
)。
我也试过
child_process.spawn('wsl', ['source /path/to/virtualenv/env/bin/activate && which python'])
和
child_process.spawn('wsl', ['source /path/to/virtualenv/env/bin/activate `&`& which python'])
也不行。
如何批处理这两个命令,以便 WSL 和 bash 了解哪些命令属于一起?
答案 0 :(得分:0)
事实证明,它的工作原理是分别发送所有命令和参数,并通过单独的“命令”&&
连接不同的命令:
child_process.spawn('wsl', ['source', '/path/to/virtualenv/env/bin/activate', '&&', 'which', 'python'])