javascript (spidermonkey) как запустить команду linux из оболочки js? - PullRequest
3 голосов
/ 19 ноября 2008

Я в тупике и чувствую себя глупо. Я перепробовал каждую поисковую комбинацию, чтобы придумать это. Это кажется простым, но, будучи новичком в javascript, я не вижу ничего полезного в поиске примеров или демонстраций. Я хочу использовать скрипт, как я бы использовал скрипт на python или perl для запуска простой команды linux. Интерпретатор запущен и работает, поэтому я просто ищу js-ресурсы на стороне сервера, чтобы узнать больше о js. Я нашел много полезных примеров, если я хочу делать такие вещи в браузере - но я не хочу использовать браузер. Мне не удалось найти такой запрос на сайте (хотя я уверен, что я не задаю правильный путь), поэтому, если это действительно избыточная запись, не стесняйтесь закрывать и указывать мне в правильном направлении.

Ответы [ 5 ]

1 голос
/ 08 января 2012

Вы можете сделать это с помощью node.js 'exec.

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

# run node.js CLI
node

Из найденного примера здесь :

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

Выводит список каталогов.

1 голос
/ 21 ноября 2008

Для Linux я обнаружил, что EJScript имеет поддержку файлов, которая работает "из коробки". Это позволяет мне делать то, что я хочу делать в любом случае. Я все еще попытаюсь скомпилировать spidermonkey с флагом File_Object, потому что я упрямый, но до сих пор у меня нет проблем с рекомендацией EJScript для программистов, которые хотят опробовать серверный javascript.

1 голос
/ 20 ноября 2008

Ищите «system ()» на этой странице , это должно быть началом (извините, я еще не использовал SpiderMonkey.)

Я думаю, что если вы сможете скомпилировать их функцию JSNative myjs_system (), вы сможете вызвать ее из кода JavaScript.

1 голос
/ 20 ноября 2008

Хорошо, теперь я чувствую себя менее глупо. Я получил его с помощью Jscript и jsc.exe, включенного в .NET Framework в 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()) }

, который дает мне имена файлов в каталоге, приятный и легкий на старой XP. Поэтому я думаю, что вопрос должен быть в том, есть ли подобная возможность сделать это в Linux? Я пытаюсь перекомпилировать движок Spidermonkey с флагом JS_HAS_FILE_OBJECT=1, но он выдает ошибку, поэтому у меня впереди кое-какие чтения и работы, чтобы заставить это работать, но я думаю, что движусь в правильном направлении. Любые советы или предложения по другому способу сделать это с помощью javascript будут приветствоваться (за исключением «использовать N», где N = python, perl, java и т. Д.).

1 голос
/ 19 ноября 2008

У вас нет доступа к системе за пределами браузера. Будь то Windows или Linux, ваша "js shell" помещена в браузер. Нет доступа к файловой системе или любым приложениям за пределами браузера. JS - это язык сценариев, который интерпретируется браузером.

У вас есть некоторый доступ к миру за пределами браузера, но только в IE, использующем ActiveX, но тогда он находится вне песочницы и больше не является чистым JavaScript Если вы будете искать по форумам, вы не найдете никакой документации, в которой говорится о доступе к файлам в javascript, без ActiveX. ActiveX недоступен в Linux или Firefox.

Возможно, вы захотите прочитать википедию, чтобы узнать больше о javascript, DOM и песочнице. http://en.wikipedia.org/wiki/JavaScript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...