2014-10-26 64 views
0

我需要以root身份運行我的程序。我看着this的問題,它有點作用。我需要使用stdin並使用bash腳本似乎不接受stdin。我正在使用Eclipse和Ubuntu。有任何想法嗎?這也會導致其他Java程序出現問題,因爲它們也不接受stdin。在Eclipse中以root身份運行Java程序

如果你運行這段代碼:

import java.io.IOException; 

public class Test { 
    public static void main(String[] args) { 
     while (true) { 
      try { 
       System.out.print((char) System.in.read()); 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

他們你類型的東西到控制檯並按下回車鍵,它輸出你鍵入的內容

當我使用bash腳本:

#!/bin/bash 
# file: /usr/lib/jvm/java-8-oracle/bin/java 
# descr: Starter for jdk. Runs jdk as root when 
#  cmd-line-arg "--run-as-root" is specified. 
# 
jre="/usr/lib/jvm/java-8-oracle/bin/java.ori" 
run_as_root=false 
args= 

# Filter command-line argument 
for arg in "[email protected]" 
do 
    case "$arg" in 
    --run-as-root) run_as_root=true 
        ;; 
    *)    args="$args $arg" 
        ;; 

    esac 
done 

# Remove leading whitespaces 
args=$(echo $args | sed -e 's/^[ \t]*//') 

if $run_as_root 
then 
    echo "WARNING: Running as root!" 
    gksu "$jre $args" 
else 
    $jre $args 
fi 

我得到了一堆奇怪的字符,當我刪除char轉換時,我得到-1,意味着流的結束。 enter image description here

+0

當你說你需要使用stdin,你的意思是你想管「|」輸入到您的Java應用程序中? – Leon 2014-10-26 17:02:07

+0

我不知道你是什麼意思管「|」但我想用控制檯/終端輸入純文本System.in – 2014-10-26 17:03:09

+0

這應該「只是工作」。你能提供一個代碼示例並描述你所得到的行爲嗎? – Leon 2014-10-26 17:04:54

回答

0

如果您在Eclipse中運行該程序,Eclipse將啓動該程序。這意味着您需要以root身份登錄,或者您需要重新配置eclipse以使用sudo

作爲root登錄比較容易,因爲它不需要額外的工作;然而,它也是更危險的,因爲你將系統暴露在程序中的錯誤以及eclipse程序中的錯誤。

sudo下運行意味着您可能並不總是有一個控制檯。安裝程序後,情況會更加如此。我建議你現在做這項工作只是讓它登錄到一個文件,就好像你正在處理1000個以下的端口套接字一樣,你是在編寫一個各種各樣的守護進程,並且它會(在完成之後)例行地發佈缺乏控制檯的環境。

+0

我的程序與串行交互,但我沒有任何時候打開該串行連接,所以它是在eclipse中通過控制檯更容易使用stdin。當它在生產中時,我將要通過串口並且根本不會使用stdin。 – 2014-10-26 17:34:53

+0

@ChristopherSmith好吧,所以你使用的是串口,而不是網口。 Linux上的要點是一樣的。有一些程序的控制檯和程序不支持。如果你想在沒有控制檯的情況下啓動,你不能使用stdin,stderr和stdout。如果你使用'sudo','/ bin/sh'等命令,你有時會得到缺乏控制檯的進程。如果你想通過可能不提供控制檯的包裝來啓動它,最好編寫你的程序不要假設stdin。無論是,還是最好運行以root身份登錄的程序(交互式會話通常都有控制檯)。 – 2014-10-26 17:55:00

+0

這不是一個守護進程,用戶正在運行命令'sudo java '。它有一個控制檯,這是Eclipse的,cmd.exe或Linux的。生產執行不是問題,只是在使用Eclipse運行時的一部分。我需要stdin與Eclipse和程序以root身份運行。 – 2014-10-26 18:09:45

相關問題