Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

309
Visualizações
¿Cómo ejecutar comandos WSL desde un proceso de nodo?

Estoy desarrollando un script de compilación de nodo pequeño que quiero iniciar WSL, cd en el directorio de mi proyecto e invocar un comando de compilación. Algo como esto:

 import { exec } from "child_process"; async function execCommand(cmd) { console.log("Executing: " + cmd); return new Promise((resolve, reject) => { exec(cmd, (error, stdout, stderr) => { if (error) { reject(); } else { resolve(); } }); }); } await execCommand(`wsl`); await execCommand(`cd /mnt/c/Users/Admin/Documents/Projects/myproject/backend`); await execCommand(`cargo build --release`);

Mi problema es que simplemente... no funciona. Es decir, el primer execCommand llama a wsl y luego parece que la ventana de la terminal nunca completa el comando (nunca termina).

En su lugar, solicita al usuario que escriba algo en el símbolo del sistema.

¿Cuál es la forma correcta de iniciar WSL desde un script de nodo y luego encadenar un montón de comandos, cada uno esperando que termine el anterior?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Finalmente lo hice funcionar.

Versión asíncrona:

 let child = spawn("wsl", [ "cd", "/mnt/c/Users/Admin/Documents/Projects/myserver/backend", "&&", "cargo", "build", "--release" ], { cwd: "C:\\Users\\Admin\\Documents\\Projects\\myserver\\backend", shell: true }); child.stdout.pipe(process.stdout); child.stderr.pipe(process.stderr); child.stdin.end();

Versión síncrona:

 let child = spawnSync("wsl", [ "cd", "/mnt/c/Users/Admin/Documents/Projects/myserver/backend", "&&", "cargo", "build", "--release" ], { cwd: "C:\\Users\\Admin\\Documents\\Projects\\myserver\\backend", shell: true }); console.log(child.stdout.toString()); console.log(child.stderr.toString());
about 4 years ago · Juan Pablo Isaza Relatório

0

En realidad, mi otra respuesta no es tan buena, porque inicia un shell separado y ejecuta los comandos a través del shell cmd en su lugar, por lo que Windows construirá el binario en lugar de WSL, que no es lo que queremos. Una mejor respuesta es:

 let child = spawnSync("wsl", [ "bash", "-l", "-c", "cargo build --release" ], { cwd: "C:\\Users\\Admin\\Documents\\Projects\\myserver\\backend" }); console.log(child.stdout.toString()); console.log(child.stderr.toString());

Debe incluir bash -l porque cuando ejecuta un comando a través wsl , no ejecuta ~/.profile y ~/.bashrc (etc). Cargo necesita eso para poder insertar ~/.cargo/bin en $PATH .

Entonces, con bash -l lo fuerza a ejecutar los scripts de inicio del perfil. Cuando inicia WSL sin ningún otro comando, iniciará sesión de forma interactiva, lo que significa que esos scripts se ejecutan.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda