명령 출력을 여러 인수로 다른 명령에 전달하는 방법


13

다음과 같은 출력을 생성하는 명령이 있습니다.

$. / command1
워드 1 워드 2 워드 3

이 세 단어를 다음과 같은 다른 명령에 대한 인수로 전달하고 싶습니다.

$ command2 word1 word2 word3

command1 출력을 세 가지 다른 인수 $ 1 $ 2 $ 3을 command2에 전달하는 방법은 무엇입니까?

답변:


9

당신은 사용할 수 있습니다 xargs로, -t플래그 xargs장황하고 그것을 실행 명령을 출력한다 :

./command1 | xargs -t -n1 command2

-n1의 모든 호출에 전달되는 최대 인수를 정의합니다 command2. 다음이 실행됩니다.

command2 word1
command2 word2
command2 word3

한 번의 command2사용 호출의 인수로 모든 것을 원한다면 다음을 수행하십시오.

./command1 | xargs -t command2

3 개의 인수로 command2를 호출합니다.

command2 word1 word2 word3

command1의 출력이보다 길면 ARG_MAX어떻게됩니까? 파일의 내용을 함수에 전달하는 시나리오가 있습니다.
0xc0de

4

'명령 대체'를 원합니다. 즉, 하나의 명령 출력을 외부에 포함

command2 $(command1)

전통적으로 이것은 다음과 같이 수행 될 수도 있습니다.

command2 `command1`

그러나이 사용법은 중첩 할 수 없으므로 일반적으로 권장되지 않습니다.

예를 들면 다음과 같습니다.

test.sh:
#!/bin/bash
echo a b c

test2.sh

#!/bin/bash
echo $2

사용하다:

./test2.sh $(./test.sh)
b

그렇게하면 command1 출력을 하나의 단일 인수로 전달합니다. $ command2 $ (cat output_from_command1)
Addy

아 맞아, 잠깐만 ... 거기에 두는 고양이에는 고양이가 필요 없어.
Sirex

나를 위해 작동합니다. 내 command2가 $ 2를 반향하면 (즉, 두 번째 인수) 예상대로 "word2"를 얻습니다.
Sirex

0

나는 이것이 당신을 도울 것 같아

command1 | xargs 명령 2

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.