2012-07-02 3 views
1

그래서 컴퓨터의 IP를 변경하는 Java 프로그램을 작성했습니다.Jar (sudo 명령 실행)를 실행하기위한 쉘 스크립트 만들기

#!/bin/sh 
sudo java -jar changeip.jar $1 $2 

내가 받고 있어요 : /bin/sh: 0: Can't open sudo ifconfig eth0 192.168.217.128sh ipconfig.sh eth0 192.168.217.128

사람이 올바른 방향으로 날 지점 수 있습니다 실행하려고

public static void main(String[] args) { 
    superUserChangeIp(args); 
} 

public static void superUserChangeIp(String[] args) { 
    try { 

     String ethInterface = args[0].toString().trim(); 
     String ip = args[1].toString().trim(); 

     System.out.println(ethInterface + " " + ip); 

     String[] command = { 
       "/bin/sh", 
       "ifconfig " + ethInterface + " " + ip }; 

     Process child = Runtime.getRuntime().exec(command); 

     changeNetworkInterface(ethInterface, ip); 

     readOutput(child); 

     child.destroy(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

나는 간단한 쉬 스크립트를했다?

참고 :이 방법 changeNetworkInterface(ethInterface, ip); 단순히 /etc/network/interfaces에있는 설정을 업데이트, 코드는 다음과 같습니다

당신이 설명한대로 JAR를 실행하는 경우
protected static void changeNetworkInterface(String ethInterface, String ip) throws IOException { 
    String oldInterface = File.readFile(NETWORK_INTERFACES_PATH); 
    StringBuilder builder = new StringBuilder(); 
    Scanner reader = new Scanner(oldInterface); 

    boolean startReplacing = false; 

    while (reader.hasNextLine()) { 
     String currentLine = reader.nextLine(); 

     if (currentLine.contains("iface " + ethInterface)) { 
      System.out.println("Found interface!"); 
      startReplacing = true; 
     } 

     if (startReplacing && currentLine.contains("address")) { 
      System.out.println("Found IP!"); 
      currentLine = "address " + ip; 
      startReplacing = false; 
     } 

     builder.append(currentLine); 
     builder.append("\n"); 
    } 

    System.out.println(builder.toString()); 

    File.writeToFile(NETWORK_INTERFACES_PATH, builder.toString()); 
} 

답변

2

, 응용 프로그램이 이미 있으므로, 수퍼 유저 권한이 있어야합니다 앱 내에서 sudo를 전혀 실행할 필요가 없습니다.

+0

감사합니다. 질문을 업데이트했습니다. –

0

정말 죄송합니다. 난 그냥

String[] command = { 
       "/bin/sh", 
       "-c", // <--- this bugger right here 
       "ifconfig " + ethInterface + " " + ip }; 

-c을 추가 그리고 지금은 작동합니다. 모두에게 감사드립니다.

관련 문제