web-dev-qa-db-ja.com

«cmd / C start "Title" "C:\ Folder \ file.bat"に相当するLinux

次のコマンドを使用してRuntime.getRuntime().exec()でWindowsでバッチファイルを実行するJavaプログラムがあります。

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

cmd /Cがコマンドを実行して終了するため、Javaプログラムはすぐに終了します (1) およびstart "Title" "C:\Folder\file.bat"startsバッチスクリプト (2)。したがって、プロセス(バッチファイル)は独立して実行を継続します

ここで、Javaから起動し、同様の動作をするシェルスクリプト(たとえばfile.sh)があるとします。 。同等のコマンドになる方法 (3) Linuxで?


  1. CMD.exe(コマンドシェル)| Windows CMD | SS64.com を参照してください。
  2. 開始-プログラムの開始| Windows CMD | SS64.com を参照してください。
  3. タイトル("Title")は必要ありません。
1
Paul Vargas

スクリプトを起動する方法は、そのパスを指定することです:

/path/to/script.sh

親プロセスが終了した場合に続行するには、&を追加してバックグラウンドで起動するだけです。

/path/to/script.sh &

したがって、たとえば、あるスクリプトが別のスクリプトを次のように呼び出している場合:

#!/bin/bash
script2.sh &

script1.shを実行してscript2.shを呼び出すと、バックグラウンドに送信されるため、すぐに終了できます。

5
terdon

多くのオプションがありますが、より興味深いものは次のとおりです。

  • 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
Helio

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:これはこの時点では単なる通常のファイルです。bash
 ex2で実行します:foo.batを実行可能としてマークしました。 ($ chmod + x foo.bat)
 ex3:コマンド置換
 ex4: "` `" 
 ex5を使用して実行:実行可能ファイルへのパスを使用します。

これらが最も一般的です。 gnome-terminalやxtermのようなものを呼び出さないようにします。これらは、bashやshのようなものに比べてあまり一般的ではないシェルです。たとえば、Ubuntu mateを使用します。 xtermもgnome-terminalもありません。しかし、私にはbashがあります。 Linux/mac osxを実行している他のほとんどの人と同様に。

スクリプトの実行に関するこのチュートリアルに感謝します here

スクリプトfoo.batはこれを行います:

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

その内容は次のとおりです。

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

$ 0を使用すると、希望するタイトル機能が得られると思います。さらに多くの可能性があります。

1
j0h

私が理解しているように、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」ファイルを作成します)。また、execを呼び出した後、Doneメッセージを印刷する独自の方法で続行します。

端末ウィンドウも開きたい場合は、呼び出し文字列にプレフィックスを付けます

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

したがって、質問に答えるには、指定したメソッドを呼び出すだけのように見えます。あなたは別の行動を得ていますか?

1
taifwa