다음 작업을 수행하기 위한 스크립트를 만들려고 합니다. Lynx 북마크에서 자석 링크를 추출한 다음 이를 컬 명령의 일부로 사용합니다. 이와 같이:
curl http://my_ip:my_port_number/startdownload/magnet_link
자석 링크를 얻으려면 다음이 필요합니다.
lynx -dump -hiddenlinks=listonly lynx_bookmarks.html | grep "magnet" | sed 's/&.*//' | cut -c 7-
하지만 두 부분을 함께 붙여서 스크립트를 만드는 방법을 잘 모르겠습니다.
조언을 좀 드려도 될까요?
그런데 저는 이 분야에 완전 아마추어이고 개선할 수 있는 부분이 있다고 확신합니다.
답변1
따라서 한 명령의 출력을 캡처하여 다른 명령에 사용해야 합니다. bash $(..) 구문을 사용하면 명령을 실행하고 출력을 캡처한 다음 다른 명령에서 사용할 수 있습니다.
한 가지 방법은 출력을 변수로 캡처하는 것입니다. 예를 들면 다음과 같습니다.
shortcut=$(lynx -dump -hiddenlinks=listonly lynx_bookmarks.html | grep magnet | sed 's/&.*//' | cut -c 7-)
curl "$shortcut"
또는 출력을 직접 사용할 수도 있습니다.
curl $(lynx -dump -hiddenlinks=listonly lynx_bookmarks.html | grep "magnet" | sed 's/&.*//' | cut -c 7-)
어느 것을 선택하느냐에 따라 선호도가 달라집니다. 명령의 출력이 여러 번 필요한 경우 출력을 변수로 캡처하여 거기에서 사용하는 것이 좋습니다.
답변2
다음 줄을 스크립트 파일에 입력합니다(예: ad mydownload.sh).
magnet=$(lynx -dump -hiddenlinks=listonly lynx_bookmarks.html | grep "magnet" | sed 's/&.*//' | cut -c 7-)
curl http://my_ip:my_port_number/startdownload/${magnet}
저장 및 종료
chmod 755 mydownload.sh
./mydownload.sh
답변3
bash-4.1$ echo $( echo hi )
hi
bash-4.1$
그래서,
curl $( ... )
이러한 명령을 하위 쉘로 실행하여 ...
모든 출력을 전달합니다 . 읽을 수 있는 헤더이고 중첩되지는 않지만 백틱을 사용하여 작성할 수도 있습니다.curl
$()
grep | sed
어쩌면 올바른 호출 한 번으로 대체될 수도 있습니다 awk
.