Проблемы ввода JavaScript в командной строке при минимизации JavaScript в Gedit - PullRequest
1 голос
/ 15 сентября 2009

Я хочу немедленно минимизировать мои файлы JavaScript в Gedit. Я попытался сделать это с помощью опции внешних инструментов с помощью скрипта jsmin.js . У меня установлен движок SpiderMonkey. Я сохранил файл jsmin.js в / home / mushex / use / js / jsmin.js и создал новый файл js с именем jsmin-low.js в тот же каталог с контентом

#!/usr/bin/js 

load('/home/mushex/use/js/jsmin.js');

var body = arguments[0],
    result = jsmin('', body, 1);
if (result) {
    print(result);
} else {
    print(body);
}

Распечатывается неопределенное. Для отладки я изменил скрипт для выполнения только в действиях печати аргументов и увидел, что входные данные имеют значение null (не определено). Исходный файл для отладки был

#!/usr/bin/js 
print(arguments[0]);

Но когда я запускаю его в командной строке, вывод выводится правильно. И через gedit другие инструменты командной строки js работают нормально. Странно, почему мои входные аргументы не передаются.

Вот настройки, которые я установил для этого инструмента в gedit.

Настройки http://imagebin.org/index.php?mode=image&id=63960

Любая помощь будет принята с благодарностью Спасибо.

1 Ответ

1 голос
/ 15 сентября 2009

Проблема в том, что gedit отправляет документ в стандартный ввод вашей программы, а не в качестве аргумента командной строки. Оболочка SpiderMonkey имеет функцию readline(), которая читает строку из stdin, но не может узнать, когда вы достигнете EOF.

Если вы скомпилируете SpiderMonkey с поддержкой File, вы, вероятно, сможете это сделать, но я никогда не пробовал этого.

Если вы используете Rhino shell , вы можете использовать классы Java напрямую, как это:

function readStdin() {
    var stdin = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.System["in"]));
    var lines = [];
    var line;
    while ((line = stdin.readLine()) !== null) {
        lines.push(line);
    }
    return lines.join("\n");
}

var body = readStdin();
...