파이프 출력을 쉘 스크립트 인수로 사용할 수 있습니까?

파이프 출력을 쉘 스크립트 인수로 사용할 수 있습니까?

Myscript.sh입력으로 하나의 인수가 필요한 bash 쉘 스크립트가 있다고 가정합니다 .

하지만 나는 호출된 텍스트 파일의 내용이 text.txt그 인수가 되기를 원합니다.

나는 이것을 시도했지만 작동하지 않습니다:

cat text.txt | ./Myscript.sh

이를 수행할 수 있는 방법이 있습니까?

답변1

명령 대체.

./Myscript.sh "$(cat text.txt)"

답변2

파이프 출력을 쉘 스크립트 인수로 사용할 수 있습니다.

다음 방법을 시도해 보세요.

cat text.txt | xargs -I {} ./Myscript.sh {}

답변3

IMHO가 질문에 정확하게 대답하는 유일한 @bac0n을 완성하기 위해 파이프 인수를 스크립트 인수 목록 앞에 추가하는 짧은 라이너가 있습니다.

#!/bin/bash

declare -a A=("$@")
[[ -p /dev/stdin ]] && { \
    mapfile -t -O ${#A[@]} A; set -- "${A[@]}"; \
}

echo "$@"

사용 예 :

$ ./script.sh arg1 arg2 arg3
> arg1 arg2 arg3

$ echo "piped1 piped2 piped3" | ./script.sh
> piped1 piped2 piped3

$ echo "piped1 piped2 piped3" | ./script.sh arg1 arg2 arg3
> piped1 piped2 piped3 arg1 arg2 arg3

답변4

파일에 둘 이상의 인수 집합이 있는 경우(여러 호출에 대해) 다음을 사용하는 것을 고려하세요.xargs또는평행한, 예:

xargs -d '\n' Myscript.sh < text.txt
parallel -j4 Myscript.sh < text.txt

관련 정보