Linux-эквивалент для «cmd / C start & ldquo; Title & rdquo; & Ldquo; C: \ Folder \ file.bat & Rdquo; »

У меня есть Java-программа, которая запускает пакетный файл в Windows с помощью Runtime.getRuntime().exec() с помощью следующей команды:

cmd /C start "Title" "C:\Folder\file.bat"

Java-программа быстро завершается, поскольку cmd /C выполняет команда и затем завершается (1) и start "Title" "C:\Folder\file.bat" запускает пакетный скрипт (2) . Таким образом, процесс (командный файл) будет продолжать работать независимо .

Теперь предположим, что у меня есть сценарий оболочки (например, file.sh ), который я хочу запустить из Java и который работает аналогично. Как это может быть эквивалентная команда (3) в Linux?


Заметки

  1. См. CMD.exe (командная оболочка) | Windows CMD | SS64.com
  2. См. Пуск - Запуск программы | Windows CMD | SS64.com
  3. Название ( "Title" ) не обязательно.
1
задан 15 April 2016 в 06:15

4 ответа

У Вас есть много опций, более интересные являются ими:

  • , Если это для Ubuntu, можно использовать gnome-terminal:

    gnome-terminal -c "/home/$USER/file.sh" -t "Title"
    
  • , Если, Вы хотите сделать его совместимым с большей частью Linux, можно использовать xterm:

    xterm -T "Title" -e "/home/$USER/file.sh"
    

путь /home/$USER/file.sh (эквивалентный Windows 7: C:\Users\%UserProfile%\file.bat)

Эти file.sh содержание может быть чем-то вроде этого:

#!/bin/bash

echo "In a World without Walls nor Fences, the people don't need Windows and Gates"
sleep 2
1
ответ дан 15 April 2016 в 06:15

Способ запустить сценарий состоит в том, чтобы дать свой путь:

/path/to/script.sh

Для имения его продолжаются, если родительский процесс выходит, можно просто запустить его в фоновом режиме путем добавления &:

/path/to/script.sh &

Так, если у Вас есть, например, один сценарий, называя другого как так:

#!/bin/bash
script2.sh &

Вы могли работать script1.sh, который будет звонить script2.sh и, потому что это отправляется в фон, выйдите сразу.

5
ответ дан 15 April 2016 в 06:15

Различные способы выполнить сценарий в Linux: моим произвольным названием сценария является foo.bat

ex1:$bash foo.bat

ex2:$./foo.bat

ex3:$echo $(~/Desktop/foo.bat)

ex4: '~/Desktop/foo.bat'

ex5: $ /path/to/shell/script/foo.bat

ex1: this is is just a regular file at this point, we execute it with bash
ex2: we have marked foo.bat as executable. ($chmod +x foo.bat)
ex3: Command substitution 
ex4: execute using "``"
ex5: we us the path to the executable.

Они наиболее распространены. Я постарался бы не называть вещи как терминал гнома и xterm. Это менее общие оболочки по сравнению с вещами как удар и sh. Например, я использую помощника Ubuntu. У меня нет ни xterm, ни терминала гнома. Но, у меня действительно есть удар и sh., как делает почти когда-либо другого человека, запускающего Linux / Mac OSX.

Можно ценить это учебное руководство на выполнении сценария здесь

сценарий foo.bat делает это:

$ ./foo.bat
Having a bash ./foo.bat

где его содержание:

$ cat foo.bat 
#!/bin/bash
echo -e "Having a bash" $0

Я думаю, что использование 0$ может дать Вам функциональность заголовка, которой можно требовать. Существует намного больше возможностей.

1
ответ дан 15 April 2016 в 06:15

Как я понимаю, Вы хотите выполнить внешнюю команду из Java, и иметь процесс Java продолжаются (асинхронно), пока та внешняя команда продолжает работать также?

Вот немного теста, который я сделал на скорую руку:

[tai@flenux runproc ] $ ls
filecreator.sh  ProcRunner.class  ProcRunner.java

[tai@flenux runproc ] $ cat filecreator.sh 
touch newfile

[tai@flenux runproc ] $ cat ProcRunner.java 

public class ProcRunner {
    public static void main(String[] args) {
        try {
            Runtime.getRuntime().exec(args);
            Thread.sleep(2000);
            System.out.println("Done");
        } catch(Exception e) {
            System.err.println(e.toString() );
        }
    }
}

[tai@flenux runproc ] $ java ProcRunner bash filecreator.sh 
Done

[tai@flenux runproc ] $ ls
filecreator.sh  newfile  ProcRunner.class  ProcRunner.java

[tai@flenux runproc ] $ 

Java успешно должностные лица программа (который просто создает "newfile" файл); это также продолжает свой собственный веселый способ распечатать Сделанное сообщение после вызова должностного лица.

, Если Вы хотели, чтобы окно терминала открылось также, снабдите префиксом строку вызова

Runtime.getRuntime().exec(["gnome-terminal", "-e"]+args);

Так для ответа на вопрос, похоже, что Вы просто назвали бы метод, который Вы указали. Вы получаете другое поведение?

1
ответ дан 15 April 2016 в 06:15

Другие вопросы по тегам:

Похожие вопросы: