쉘 스크립트에 명령 변수를 도입하면 작동하지 않습니다.

쉘 스크립트에 명령 변수를 도입하면 작동하지 않습니다.

이는 예상대로 정확하게 작동합니다.

echo -n 80 443 | xargs -d ' ' -I% bash -c 'socat TCP4-LISTEN:%,fork TCP4:123.123.123.123:% &'

하지만 이 버전은 아닙니다. $ip 변수를 전달할 수 없으므로 IP는 0.0.0.0이 됩니다.

ip=$(cat ip.txt)
echo -n 80 443 | xargs -d ' ' -I% bash -c 'socat TCP4-LISTEN:%,fork TCP4:$ip:% &'

예상대로 작동하게 하려면 어떻게 해야 합니까?

답변1

변수가 작은따옴표로 묶여 있기 때문에 작동하지 않습니다. 쉘은 작은 따옴표로 변수를 확장하지 않습니다. socat이 잘못된 IP를 발견하면 0.0.0.0을 사용하는 것 같습니다.

포트와 IP를 명령줄 인수로 bash 주체에 전달합니다.

ip=$(< ip.txt)    # this is a bash builtin equivalent to $(cat ip.txt)
printf '%s\n' 80 443 | xargs -I% bash -c 'socat "TCP4-LISTEN:$1,fork" "TCP4:$2:$1" &' bash % "$ip"

두 번째 "bash"에는 $0이 할당됩니다.

관련 정보