2012-09-17 21 views
3

我想知道如何在不輸入node script_name.js的情況下運行該腳本。當我從終端啓動腳本時會顯示提示,但是當我嘗試將腳本作爲程序(從文件管理器,而不是命令行)運行時,它只是打開和關閉終端,而不顯示提示。爲什麼這個node.js腳本不能在終端中保持打開狀態?

#!/usr/local/bin/node 

var prompt = require('prompt'); 

//var stuff = require("./stuff"); 

    prompt.start(); 

    prompt.get(['username', 'email'], function (err, result) { 
    if (err) { return onErr(err); } 
    console.log('Command-line input received:'); 
    console.log(' Username: ' + result.username); 
    console.log(' Email: ' + result.email); 
    }); 

    function onErr(err) { 
    console.log(err); 
    return 1; 
    } 

下面是該計劃的預期輸出(帶輸入):

[email protected]:~/AeroFS/node.js examples$ node node_prompt_demo.js 
prompt: username: blah 
prompt: email: [email protected] 
Command-line input received: 
    Username: blah 
    Email: [email protected] 
+0

當我從終端啓動它時腳本運行完美,但是當我從桌面或文件管理器中選擇「在終端中運行」時,該腳本不起作用。我仍然不明白爲什麼選擇「在終端中運行」時無法使用命令行提示符。 –

+0

此外,這個問題可能是相關的(雖然我認爲它是爲bash腳本,而不是node.js):http://askubuntu.com/questions/20330/how-to-run-script-and-dont-close- a-terminal –

+0

爲了澄清,我已經設置了腳本作爲應用程序運行的權限。它顯示正確的輸出並在我使用「node name_of_script.js」啓動腳本時給出正確的提示,但終端僅在我嘗試通過單擊「在終端中運行」運行腳本時打開和關閉。 –

回答

0

這幾乎肯定與控制tty做。我猜你正在使用的文件管理器不會給你一個附加到任何東西上的stdin,它只是在沒有任何輸入的情況下退出。

最好的辦法是把它包裝在一個程序中,它會給它一個有效的stdin。例如,在Mac上,我運行Terminal.app內的節點腳本,以便始終獲取有效的stdin。應該能夠在XWindows中做類似的事情。如果你不使用窗口管理器,你也可以嘗試使用「expect」和「screen」。這些組合應該讓你得到你想要的。

相關問題