javascript - tag - title of page html
Cómo ejecutar el comando de shell en Javascript (12)
¡Con NodeJS es así de simple! Y si desea ejecutar este script en cada inicio de su servidor, ¡puede echarle un vistazo a la aplicación de forever-service !
var exec = require(''child_process'').exec;
exec(''php main.php'', function (error, stdOut, stdErr) {
// do what you want!
});
Quiero escribir una función de JavaScript que ejecutará los comandos del shell del sistema ( ls
por ejemplo) y devolverá el valor.
¿Cómo logro esto?
¿Qué pasa si el cliente que está ejecutando este javascript está ejecutando Windows? Esto quiere decir que lo que intentas lograr no es posible. Javascript es un lenguaje de secuencias de comandos del cliente y se ejecuta en un entorno de espacio aislado a menudo dentro de un navegador web que le impide acceder a los recursos en la computadora.
... algunos años después ...
ES6 ha sido aceptado como estándar y ES7 está a la vuelta de la esquina, por lo que merece una respuesta actualizada. Usaremos ES6 + async / await con nodejs + babel como ejemplo, los requisitos previos son:
Su ejemplo de archivo foo.js
puede verse así:
import { exec } from ''child_process'';
/**
* Execute simple shell command (async wrapper).
* @param {String} cmd
* @return {Object} { stdout: String, stderr: String }
*/
async function sh(cmd) {
return new Promise(function (resolve, reject) {
exec(cmd, (err, stdout, stderr) => {
if (err) {
reject(err);
} else {
resolve({ stdout, stderr });
}
});
});
}
async function main() {
let { stdout } = await sh(''ls'');
for (let line of stdout.split(''/n'')) {
console.log(`ls: ${line}`);
}
}
main();
Asegúrate de tener babel:
npm i babel-cli -g
Instale el último preset:
npm i babel-preset-latest
Ejecútelo a través de:
babel-node --presets latest foo.js
Aquí hay un comando simple que ejecuta el ifconfig
shell de Linux
var process = require(''child_process'');
process.exec(''ifconfig'',function (err,stdout,stderr) {
if (err) {
console.log("/n"+stderr);
} else {
console.log(stdout);
}
});
Con nashorn puedes escribir un script como este:
$EXEC(''find -type f'');
var files = $OUT.split(''/n'');
files.forEach(...
...
y ejecutarlo:
jjs -scripting each_file.js
En IE, puedes hacer esto:
var shell = new ActiveXObject("WScript.Shell");
shell.run("cmd /c dir & pause");
En Java, dependiendo de los privilegios:
Runtime run = Runtime.getRuntime();
Process pr = run.exec("ls");
pr.waitFor();
BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = "";
while ((line=buf.readLine())!=null) {
System.out.println(line);
}
En JavaScript no puedes. En realidad son dos cosas bastante separadas.
EDITAR
Mi respuesta fue escrita cuando la pregunta tenía las etiquetas java
y javascript
. Como OP no parece hacer la distinción, no creo poder decir con certeza cuál se solicita aquí.
En una palabra:
// Instantiate the Shell object and invoke its execute method.
var oShell = new ActiveXObject("Shell.Application");
var commandtoRun = "C://Winnt//Notepad.exe";
if (inputparms != "") {
var commandParms = document.Form1.filename.value;
}
// Invoke the execute method.
oShell.ShellExecute(commandtoRun, commandParms, "", "open", "1");
Esto depende completamente del entorno de JavaScript. Por favor elabora.
Por ejemplo, en Windows Scripting, haces cosas como:
var shell = WScript.CreateObject("WScript.Shell");
shell.Run("command here");
Muchas de las otras respuestas aquí parecen abordar este problema desde la perspectiva de una función de JavaScript que se ejecuta en el navegador. Voy a disparar y responder, suponiendo que cuando el asker dijera "Shell Script" se refería a un JavaScript de Back-end de Node.js. Posiblemente usando commander.js para usar el marco de tu código :)
Puede usar el módulo child_proccess desde la API del nodo. Pegué el código de ejemplo a continuación.
var exec = require(''child_process'').exec, child;
child = exec(''cat *.js bad_file | wc -l'',
function (error, stdout, stderr) {
console.log(''stdout: '' + stdout);
console.log(''stderr: '' + stderr);
if (error !== null) {
console.log(''exec error: '' + error);
}
});
child();
¡Espero que esto ayude!
Nota: Estas respuestas son de un cliente basado en navegador a un servidor web basado en Unix.
Ejecutar comando en el cliente
Usted esencialmente no puede. Security dice que solo se ejecuta dentro de un navegador y que su acceso a los comandos y al sistema de archivos es limitado.
Ejecute ls en el servidor
Puede usar una llamada AJAX para recuperar una página dinámica que pasa sus parámetros a través de un GET.
Tenga en cuenta que esto también abre un riesgo de seguridad ya que tendría que hacer algo para asegurarse de que el hacker de mrs rouge no haga que su aplicación diga ejecutar: / dev / null && rm -rf / ......
Así que, en pocas palabras, huir de JS es solo una mala, mala idea ... YMMV
Otra publicación sobre este tema con una buena solución jQuery / Ajax / PHP: