Linuxで実行しようとしています:
command[0] = "~/test/bin/runScript_sh";
Runtime.getRuntime().exec(command);
しかし、例外を取得しますjava.io.IOException:プログラム
error = 2を実行できません、そのようなファイルまたはディレクトリはありません
チルダを評価できないためか。
何ができる?
自分で交換します。
if(path.s.substring(0,1).contains("~"))
path = path.replaceFirst("~",System.getProperty("user.home"));
これで、必要な文字列が得られます。
次のコマンドでユーザーのホームディレクトリを取得できますSystem.getProperty
。
command[0] = System.getProperty("user.home") + "/test/bin/runScript_sh";
シェルコマンドプロンプトでコマンドを実行すると、~
展開、見積もり処理、グロブ、$ variable展開、入力/出力リダイレクト、配管などがすべてシェルによって処理されます...オペレーティングシステムに実行を要求する前にあなたのためのプログラム。
を使用してコマンドを実行する場合、次のRuntime.exec
3つの選択肢があります。
execを使用して子シェルを起動し、コマンドを実行します。例えば
Runtime.getRuntime().exec("/bin/sh", "-c", "~/test/bin/runScript_sh");
このような単純なケースでは、それはおそらくやり過ぎです。しかし、もっと複雑なことをしようとしているのなら、子シェルは本当に物事を単純化することができます。
1-実際、完全にシェル互換のチルダの処理はかなり複雑です。
~
やなどのアイテム$HOME
はシェル拡張です
プログラムでこれらのアイテムを展開してから置き換える必要があります(ヒント:osプロパティから取得します。このページを参照してください) 。