私はUnixファイルシステムについて学んでいます管路。 ~によるとオタク中のオタク、
パイプは、2番目のプログラムが読み取られるまで、最初のコマンドの出力を保持します。
だからできるかと思いました。協会ㅏCプログラムそしてJavaプログラムCコードの出力をJavaコードのコマンドライン引数として提供します。
これは私のコードです。
CC
#include <stdio.h>
int main(){
printf("World");
return 0;
}
Java.java
public class Java{
public static void main(String[] a){
System.out.println("Hello "+a[0]);
}
}
Cオブジェクトファイル実行コマンドとJavaクラス実行コマンドを連結して、次のような出力を試みます。
Hello World
私が試したことは次のとおりです。
gcc -o c c.c
javac Java.java
./c | java Java
仕事は期待どおりに進まなかった。 JavaプログラムはCプログラムの出力を受け取らずに例外を発生させますArrayIndexOutOfBounds
。また、Cプログラムの出力も表示できません。
可能であれば、どのように目標を達成できますか?
ベストアンサー1
あなたが望むことは可能ですが、試みほど簡単ではありません。正しく指摘したように、パイプはコマンドライン引数ではなく入力を提供します。
幸いなことに、これを行う(標準的な)手順があります。xargs
GNUワールド(Linux)の最善のアプローチは、出力要素をリテラルゼロバイトに分割することです。
/your/c/program | xargs --no-run-if-empty -0 /your/java/program
以下を使用して簡単に試すことができますecho
(とにかく基本的なコマンドです)xargs
。
echo '/bin
/etc
/usr' | xargs ls -ld