xargs를 사용하여 명령 중간에 여러 인수 전달

xargs를 사용하여 명령 중간에 여러 인수 전달

xargs를 사용하여 명령 중간에 여러 인수를 전달하는 방법이 있습니까?

javaoptions.txt예를 들어, 기본 Java 옵션 세트가 포함 된 파일이 있습니다 . 나는 다음과 같은 일을 할 수 있기를 원합니다.

xargs -I % java % ClassName < javaoptions.txt

모든 옵션을 명령에 전달합니다. 그러나 이 작업을 시도하면 여러 명령을 사용하여 매번 하나의 옵션을 전달합니다.

어쨌든 실행중인 소스코드는 수정할 수 없어요

답변1

javaoptions.txt내가 올바르게 이해했다면 Java 명령에 삽입하려는 내용입니다 . 그렇다면 xargs그것은 도움이 되지 않습니다. 이는 다른 명령의 각 출력 줄에서 동일한 명령을 실행하는 것입니다. 필요한 것은 여기에 있습니다.

java $(cat javaoptions.txt) ClassName

(...옵션에 공백이나 와일드카드 등이 포함되어 있지 않다고 가정)

그러나 개인적으로 저는 옵션을 배열에 저장하는 함수를 작성하여 공백이 포함된 옵션을 사용할 수 있도록 했습니다.

runJava(){
   javaOpts=( -Xmx4g -Djava.io.tmpdir=/tmp/foo ) ## random example
   java "${javaOpts[@]}" "$@"  ## run the java command with the options    
} 

이것을 ~/.bashrc귀하의 (또는 이에 상응하는 쉘)에 추가하면 다음을 실행할 수 있습니다.

runJava Classname

달리기

java -Xmx4g -Djava.io.tmpdir=/tmp/foo Classname

답변2

간단히:

xargs sh -c 'exec java "$@" ClassName' -- < javaoptions.txt

관련 정보