값 목록을 bash 스크립트로 파이프

값 목록을 bash 스크립트로 파이프

스크립트가 있습니다. myScript.

두 개의 매개변수가 필요합니다. myScript arg1 arg2.

세 가지 인수 집합이 있다고 가정해 보겠습니다.

argA1 argB1
argA2 argB2
argA3 argB3

각 줄을 myScript로 파이프하는 방법이 있습니까? xargs를 사용하여 파일에 매개 변수 집합을 포함시키고 싶습니다. 무엇을 조사해야 할지 잘 모르겠습니다.

따라서 아래의 가짜 예와 같은 명령을 실행합니다.

cat myFile | xargs > myScript

다른 스크립트가 필요 없으며 명령줄의 명령만 있으면 됩니다.

답변1

오직:

xargs -l1 <myFile myScript

-l1각 입력 라인에 대해 한 번씩 실행하고 xargs해당 라인의 단어를 별도의 인수로 전달하도록 지시합니다.myScript1 l1 l

의 경우 xargs단어는 공백으로 구분되며 따옴표를 사용하면 단어 내에 공백(또는 개행)을 포함할 수 있습니다. 그러나 , 및 인용은 대부분의 쉘처럼 xargs지원되지만 구문 분석은 Bourne과 같은 쉘의 구문 분석과 다릅니다. 특히 no 와 only는 모두 백슬래시를 처리하지 않으며 줄 바꿈만 이스케이프할 수 있습니다."..."'...'\"..."'...'\

예를 들어 myFile다음이 포함될 수 있습니다.

word1.1 word1.2
"word 2.1" 'word 2.2'
"word'3.1" 'word"3.2'
'word"'"4'1" word\"4\'2
'word '\
5.1 "word "\
5.2

그리고

xargs -l1 <myFile printf 'First word: "%s", second word: "%s"\n'

생산 예정:

First word: "word1.1", second word: "word1.2"
First word: "word 2.1", second word: "word 2.2"
First word: "word'3.1", second word: "word"3.2"
First word: "word"4'1", second word: "word"4'2"
First word: "word
5.1", second word: "word
5.2"

GNU 구현을 사용하면 xargs이를 다음과 같이 개선할 수 있습니다.

xargs -l1 -r -a myFile myScript

이것의 장점은 stdin이 비어 myScript있으면 myFile실행되지 않고 단독으로 남겨질 수 있다는 것입니다.

관련 정보