Crear un script de Shell para ejecutar un Jar (que ejecuta un comando sudo)

Entonces escribí un programa Java para cambiar la IP de una máquina.

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();
    }
}

Hice un simple script sh:

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

y me estoy poniendo: /bin/sh: 0: Can't open sudo ifconfig eth0 192.168.217.128tratando de corrersh ipconfig.sh eth0 192.168.217.128

¿Alguien puede señalarme en la dirección correcta?

Nota: el método changeNetworkInterface(ethInterface, ip);simplemente actualiza la configuración que se encuentra en el /etc/network/interfacessiguiente código:

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());
}
Respuesta 1

Si está ejecutando el JAR como lo describió, la aplicación ya tendrá privilegios de superusuario, por lo que no necesita ejecutar sudo dentro de la aplicación.

Respuesta: 2

Estoy usando una AsyncTask para realizar una tarea de inicio de sesión. La tarea se conecta a un script PHP y devuelve un objeto JSON. El objeto JSON incluye un user_id si la autenticación se autentica correctamente, ...

Estoy tratando de transmitir cadenas a través de la red de iridio, y el costo de enviar datos es bastante grande. Me pregunto si hay una manera de comprimir una cadena grande, por ejemplo: {"paquete": 01, "...

¿Podrías ayudarme con una cosa? Imagine que tengo un microservidor RESTful simple con un método GET que simplemente responde con una cadena aleatoria. Reúno todas las cadenas en un ConcurrentHashSet <...

¿Puedo usar una solicitud "PUT" con oauth2? He escrito una aplicación REST API, utilizando Java Servletlet. Cuando uso la solicitud "POST", recibo una respuesta exitosa con access_token. Pero, cuando uso "PUT" ...