한 명령의 출력을 명령 행 인수로 다른 명령에 전달하는 방법은 무엇입니까?


50

그래서 두 개의 주소를 주면 두 개의 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

이와 같은 디버깅을 위해 변수 값을 확인하면 (값을 터미널에 에코하여) 종종 솔루션으로 빠르게 이동할 수 있습니다.
kasterma

답변:



19

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

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

xargs가 stdin을 두 개 이상의 쉼표 호출로 분할하지 않도록주의해야합니다 (위 예에서 "cat").


이 명령 이름을 기억할 수 없었기 때문에 여기서 끝났습니다. 내가 가장 좋아하는 유스 케이스가 참이었다 xargs를 -I % some_command --input = % -e -t -c (I 같은 흔적을 따라 다른 사람을 위해 참고로 여기에 넣어)
mpasko256

14

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

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

5

여기에 답변을 조합하여 사용할 수있는 것 같습니다. 공백 문자를 URL에서 이스케이프 된 ASCII 값으로 바꾸고 싶다고 생각합니다. 이렇게하려면 "%"뿐만 아니라 "% 20"으로 바꿔야합니다. 다음은 완전한 답변을 제공하는 솔루션입니다.

$ wget `echo http://maps.google.be/maps\?saddr\=$1\&daddr\=$2 | sed -e 's/\ /\%20/g'` -q -O temp.html

백틱은 동봉 된 명령이 먼저 해석되고 결과가 wget으로 전송됨을 나타냅니다. sed 명령에서 공백과 % 문자를 이스케이프 처리하여 잘못 해석되지 않도록했습니다. wget에 대한 -q 옵션은 명령 출력이 화면에 인쇄되지 않도록합니다 (작업 중 상태에 신경 쓰지 않을 경우 스크립팅에 적합 함). -O 옵션은 출력 파일을 지정합니다. 참고로, 출력을 파일에 저장하지 않고 터미널에서 출력하려면 파일 이름 대신 "-"를 사용하여 stdout을 나타냅니다.


3

또한 wget은 -스위치 와 함께 stdin을 허용 합니다.

출력을 파일로 저장하려면 -O스위치를 사용하십시오 .

echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g' | wget -i- -O temp.html
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.