한 명령의 출력을 명령줄 인수로 다른 명령에 어떻게 전달합니까?

한 명령의 출력을 명령줄 인수로 다른 명령에 어떻게 전달합니까?

그래서 두 개의 주소를 제공하면 두 개의 HTML 링크를 검색하는 스크립트가 있습니다.

echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" | sed 's/ /%/g'

으로 보낸 wget다음 출력을 이라는 파일에 저장하고 싶지만 temp.html작동하지 않습니다. 누군가 이유를 설명하거나 해결책을 줄 수 있습니까?

#!/bin/bash
url = echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" |  sed 's/ /%/g'
wget $url

답변1

백틱(`)을 사용하여 명령을 평가하고 해당 출력을 바꿀 수 있습니다. 예를 들면 다음과 같습니다.

echo "Number of files in this directory: `ls | wc -l`"

귀하의 경우:

wget `echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g'`

답변2

"xargs"를 사용할 수 있습니다. 간단한 예:

ls -1 *.c | sort -n | xargs cat

xargs는 stdin을 두 개 이상의 명령 호출(위 예에서는 "cat")로 분할하지 않는다는 점에 유의해야 합니다.

답변3

실제로 URL 줄을 실행하지 않습니다.

#!/bin/sh
url="$(echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g')"
wget $url

답변4

xargs한 명령의 출력을 다른 명령의 매개변수에 넣는 가장 좋은 옵션입니다.

command1의 출력이 이고 다음 명령이 이를 인수로 3사용하기를 원한다고 가정 하면 다음과 같은 것이 필요합니다.3

command2 3(which is output of 1st command) 4 5

그래서 이것을 위해 당신은 할 수 있습니다

command1 | xargs -I{} command2 {} 4 5

여기서 4와 5는 필요할 수 있는 두 개의 추가 매개변수입니다 command2.

첫 번째 명령의 출력을 원하는 곳에 중괄호를 넣을 수 있습니다.

그래서, 사용

command1 | xargs -I{} command2 {} 

관련 정보