2008-11-19 8 views
3

Je suis perplexe et me sens stupide. J'ai essayé toutes les combinaisons de recherche auxquelles je pouvais penser pour comprendre cela. Cela semble simple, mais étant nouveau pour javascript je ne vois rien d'utile dans ma recherche d'exemples ou de démos. Je cherche à utiliser un script comme un script python ou perl pour lancer une simple commande linux. L'interpréteur est opérationnel et je suis à la recherche de ressources js côté serveur pour en savoir plus sur js. J'ai trouvé beaucoup d'exemples utiles si je veux faire ce genre de choses dans un navigateur - mais je ne veux pas utiliser le navigateur. Je ne pouvais pas trouver une requête comme celle-ci sur le site (même si je suis sûr que je ne demande pas le bon chemin) donc si c'est vraiment un post redondant n'hésitez pas à fermer et pointez-moi dans la bonne direction.javascript (spidermonkey) comment exécuter une commande linux depuis js shell?

Répondre

1

Vous n'avez pas accès au système au-delà du navigateur. Que ce soit Windows ou Linux, votre "shell js" est encadré dans le navigateur. Il n'y a pas d'accès au système de fichiers ni à aucune application au-delà du navigateur. JS est un langage de script qui est interprété par le navigateur.

Vous avez un peu d'accès au monde en dehors du navigateur, mais seulement sur IE en utilisant ActiveX, mais c'est hors du sandbox et ce n'est plus du javascript pur. Si vous recherchez sur les forums, vous ne trouverez aucune documentation qui parle de l'accès aux fichiers en javascript, sans ActiveX. ActiveX n'est pas disponible sur Linux ou Firefox.

Vous voudrez peut-être lire sur wikipedia pour en savoir plus sur javascript, DOM et le bac à sable. http://en.wikipedia.org/wiki/JavaScript

+0

JavaScript côté serveur est une bête différente, IIRC des jours de gloire Netscape ... – Kev

+1

JavaScript peut manquer de navigateurs! Voir WSH de Windows avec son JavaScript ainsi que l'interpréteur VBScript, les deux avec un accès complet au système. – PhiLho

1

Rechercher "system()" sur this page, qui devrait être un début (désolé, je ne l'ai pas réellement utilisé SpiderMonkey encore.)

Je pense que si vous pouvez compiler leur fonction JSNative myjs_system() , vous pouvez ensuite l'appeler depuis votre code JavaScript.

1

Ok, je me sens moins stupide maintenant. Je l'ai eu de travail en utilisant JScript et le jsc.exe fourni avec le .NET Framework sur Windows:

> var myFileSystemObj = new ActiveXObject("Scripting.FileSystemObject"); 
> 
> var pathToFileDir = "."; 
> var myFolder = myFileSystemObj.GetFolder(pathToFileDir); 
> 
> var myEnum = new 
> Enumerator(myFolder.Files); 
> 
> for 
> (;!myEnum.atEnd();myEnum.moveNext()) { 
> print(myEnum.item()) } 

qui me donne les noms de fichiers dans un répertoire facile et agréable sur le vieux XP. Donc, je suppose que la question devrait être: y a-t-il une facilité similaire pour faire cela sur Linux? J'essaye de recompiler le moteur de Spidermonkey avec le drapeau JS_HAS_FILE_OBJECT=1, mais il a des erreurs dehors, donc j'ai quelques lecture & travail devant moi pour que cela fonctionne, mais je pense que je me dirige dans la bonne direction. Des astuces ou des suggestions sur une manière différente de le faire avec javascript seraient les bienvenues (au-delà de "use N", où N = python, perl, java, etc ...).

1

Pour Linux, j'ai trouvé que EJScript a un support de fichier qui fonctionne hors de la boîte. Cela me permet de faire ce que je veux faire de toute façon. Je vais quand même essayer de compiler spidermonkey avec le flag File_Object parce que je suis têtu, mais jusqu'ici je n'ai aucun problème à recommander EJScript pour les programmeurs qui veulent essayer javascript sur le serveur.

1

Vous pouvez le faire avec node.js 'exec.

# install node.js (debian/ubuntu) 
sudo apt-get install nodejs 

# run node.js CLI 
node 

D'un exemple trouvé here:

var sys = require('sys') 
var exec = require('child_process').exec; 
function puts(error, stdout, stderr) { sys.puts(stdout) } 
exec("ls -la", puts); 

cette commande affiche une liste de répertoires.

+0

Merci GGG. Je vois finalement ceci une année + après que vous l'ayez quitté, mais j'aurais probablement choisi ceci comme réponse acceptée si le moment de ma question était différent (j'ai employé le noeud assez fréquemment récemment comparé à l'ejscript). –

Questions connexes