
두 개의 원치 않는 파일을 생성하는 DD-WRT 라우터에서 이 스크립트를 작성하게 되었는데 그 이유를 이해할 수 없는 것 같습니다. 저는 특히 bash를 사용하는 스크립팅 천재가 아니므로 도움을 주시면 감사하겠습니다.
#!/bin/sh
sleep 30
mkdir /tmp/myvpn; cd /tmp/myvpn
# ... doing stuff...
while [ 1 ]
do
r1=`wget -q http://ipinfo.io/ip` > /dev/null
r2=`$(wget -q "http://ipinfo.io/$r1/country")` > /dev/null
if [ $r2 -eq "XX" ]
then echo "XX OK" > /tmp/myvpn/result_check_vpn.txt
else
echo "XX NOK" > /tmp/myvpn/result_check_vpn.txt
killall -q openvpn
sleep 5
openvpn --config /tmp/openvpncl/openvpn.conf --route-up /tmp/myvpn/route-up.sh --down-pre /tmp/myvpn/route-down.sh --daemon
sleep 25
sh /proc/net/ip_conntrack_flush
fi
sleep 180
done
이 스크립트는 /tmp/myvpn에 "country" 및 "ip"라는 두 개의 원치 않는 파일을 생성합니다. 제가 뭔가 잘못하고 있는 게 틀림없어요. 기본적으로 스크립트는 국가를 효과적으로 변경했는지 확인하여 VPN이 올바르게 설정되었는지 확인하려고 합니다(이 확인을 수행하는 데 필요함).
답변1
파일은 다음 두 명령으로 생성됩니다.
r1=`wget -q http://ipinfo.io/ip` > /dev/null
r2=`$(wget -q "http://ipinfo.io/$r1/country")` > /dev/null
좋습니다. 두 번째는 구문 오류입니다. 하지만 오타인 것 같습니다. 명령 wget
의 형식은 다음과 같습니다.
wget http://www.example.com/file
그런 다음 다운로드하여 file
현재 디렉터리에 저장합니다. 어떤 일이 일어날 것으로 예상하는지 알려주지 않으셨기 때문에 파일 내용을 변수에 저장하려고 하신 것으로 추측됩니다. 그렇다면 다음을 wget
사용하여 표준 출력으로 인쇄하도록 지시해야 합니다 -O -
.
r1="$(wget -qO - http://ipinfo.io/ip)"
r2="$(wget -qO - http://ipinfo.io/$r1/country)"
> /dev/null
물론 출력( )을 리디렉션할 수는 없습니다 . 이는 아무것도 인쇄되지 않음을 의미하기 때문입니다.