Command Line JavaScript argumentos de entrada problemas enquanto A redução de JavaScript no Gedit

StackOverflow https://stackoverflow.com/questions/1428428

Pergunta

Eu quero apoucar o meu JavaScript arquivos imediatamente em Gedit. Eu tentei fazê-lo através da opção ferramentas externa com jsmin.js roteiro . Tenho motor SpiderMonkey instalado. I armazenado jsmin.js arquivo em /home/mushex/use/js/jsmin.js e criou um novo js arquivo chamado jsmin-low.js no mesmo diretório com o conteúdo

#!/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);
}

Ele imprime indefinido. Para depuração eu mudei script para executar somente em ação impressão argumento, e viu que a entrada é nula (indefinido). Fonte de arquivo para depuração era

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

Mas quando eu estou correndo em linha de comando que de saída está correta. E via gedit outras ferramentas de linha de comando js estão trabalhando normal. Vagando por que meus argumentos de entrada não passa.

Aqui estão as configurações que estabeleci para esta ferramenta no gedit.

Configurações http://imagebin.org/index.php?mode=image&id= 63960

Qualquer ajuda será muito apreciada Obrigado.

Foi útil?

Solução

O problema é que gedit está enviando o documento para a entrada padrão do seu programa, e não como um argumento de linha de comando. O shell SpiderMonkey tem uma função readline() que lê uma linha do stdin, mas ele não tem uma maneira de saber quando você atingir EOF.

Se você compilar SpiderMonkey com suporte File, você provavelmente poderia fazê-lo, mas eu nunca tentei isso.

Se você usar o Rhino shell , você pode usar classes Java diretamente assim:

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top