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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


У вас нет доступа к системе за пределами браузера. Будь то Windows или Linux, ваша «js-оболочка» изолирована от браузера. Нет доступа к файловой системе или каким-либо приложениям за пределами браузера. JS - это язык сценариев, который интерпретируется браузером.
У вас есть некоторый доступ к миру за пределами браузера, но только в IE с использованием ActiveX, но тогда он находится за пределами песочницы, и это уже не чистый javascript. Если вы будете искать на форумах, вы не найдете документации, в которой говорится о доступе к файлам в javascript без ActiveX. ActiveX недоступен в Linux или Firefox.
Возможно, вы захотите почитать в Википедии, чтобы узнать больше о javascript, DOM и песочнице. http://en.wikipedia.org/wiki/JavaScript
JavaScript может закончиться в браузерах! См. Windows WSH с его JavaScript и интерпретатором VBScript, оба с полным доступом к системе.
Ищите "system ()" на эта страница, это должно быть началом (извините, я еще не использовал SpiderMonkey.)
Я думаю, если вы можете скомпилировать их JSNative-функцию myjs_system (), вы можете вызвать ее из своего кода JavaScript.
Хорошо, теперь я чувствую себя менее глупым. Я заставил его работать с использованием 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 и т. д.).
Для Linux я обнаружил, что EJScript имеет поддержку файлов, которая работает "из коробки". Это позволяет мне делать то, что я хочу делать в любом случае. Я все еще буду пытаться скомпилировать spidermonkey с флагом File_Object, потому что я упрямый, но пока у меня нет проблем порекомендовать EJScript программистам, которые хотят опробовать серверный javascript.
Вы можете сделать это с помощью exec node.js.
# 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);
Это выводит список каталогов.
Спасибо, GGG. Я наконец вижу это через год + после того, как вы его оставили, но я, вероятно, выбрал бы это, поскольку принятый ответ, если бы время моего вопроса было другим (в последнее время я довольно часто использую node по сравнению с ejscript).
Серверный JavaScript - это другой зверь, IIRC из дней славы Netscape ...