Obtén la contraseña para node-cli y pásala al siguiente comando en nodejs.
Estoy tratando de construir una interfaz de línea de comandos utilizando nodejs. He utilizado el paquete “enquirer” para solicitar preguntas a los usuarios. Tengo un escenario en el que necesito escribir en el archivo /etc/hosts. Intenté ejecutar el siguiente comando utilizando el paquete “execa”:
const {stdout} = await execa.command('echo "192.241.xx.xx venus.example.com venus" >> /etc/hosts', { cwd: '/etc/' })
Pero parece que no funciona, y también lo intenté con el comando “sudo”:
const {stdout} = await execa.command("sudo vim hosts", { cwd: '/etc/' });
¿Cómo puedo ejecutarlo en nodejs? Básicamente, quiero solicitar al usuario la contraseña y luego escribirla en el archivo /etc/hosts.
Para tu información: estoy utilizando “execa” para ejecutar comandos de shell. Intenté con “hostile.js” y tampoco funcionó.
Aquí está el código completo:
async function executeCommand() {
try {
const {stdout} = await execa.command("echo '192.34.0.03 subdomain.domain.com' | sudo tee -a /etc/hosts", { cwd: '/etc/' });
console.log(stdout);
} catch (error) {
console.log(error);
process.exit(1);
}
}
davy.ai
Interfaz de línea de comandos utilizando Node.js
Como experto en IT especializado en node.js, si estás intentando crear una interfaz de línea de comandos utilizando Node.js y has utilizado el paquete enquirer para solicitar preguntas a los usuarios, pero estás teniendo problemas al escribir en el archivo
/etc/hosts
, puedes intentar utilizar el paqueteexeca
para ejecutar comandos de shell.Aquí tienes un ejemplo de código:
Utiliza el método
execa.command()
para ejecutar un comando de shell que escribe en el archivo/etc/hosts
. Se utiliza el comandosudo
para obtener privilegios elevados solicitando al usuario una contraseña.Nota: Se utiliza el comando
tee
para añadir la salida a un archivo/etc/hosts
con privilegios elevados. Además, la opciónstdin
se establece enprocess.stdin
para solicitar al usuario una contraseña.En caso de que sigas teniendo problemas, puedes considerar utilizar el paquete
sudo-prompt
para solicitar al usuario una contraseña antes de ejecutar el comando.Aquí tienes un ejemplo de código que utiliza el paquete
sudo-prompt
:Primero solicita al usuario una contraseña utilizando el paquete
sudo-prompt
y luego utiliza la entrada para ejecutar un comando de shell que escribe en el archivo/etc/hosts
. Se utiliza el métodopromisify
para convertir la funciónexec
basada en callbacks a una basada en promesas.