如何运行'done<&书信电报;(curl-sL file.txt);`在ksh的旧版本(1993-12-28)中,还是更新到bash?
我有一个脚本,可以在所需的许多服务器上完美地运行。但最近它在使用旧ksh版本的服务器上失败了 你能帮我修一下这条有问题的线吗如何运行'done<&书信电报;(curl-sL file.txt);`在ksh的旧版本(1993-12-28)中,还是更新到bash?,bash,curl,ksh,Bash,Curl,Ksh,我有一个脚本,可以在所需的许多服务器上完美地运行。但最近它在使用旧ksh版本的服务器上失败了 你能帮我修一下这条有问题的线吗 #!/bin/ksh SUCCESS=0 FAILURE=0 while read IP do CURL=$(curl -s -m 2 -x http://$IP -L http://icanhazip.com) if [[ "${IP%%:*}" == "${CURL%%:*}" ]] ; then SUCCESS=$[SUCCESS+
#!/bin/ksh
SUCCESS=0
FAILURE=0
while read IP
do
CURL=$(curl -s -m 2 -x http://$IP -L http://icanhazip.com)
if [[ "${IP%%:*}" == "${CURL%%:*}" ]] ; then
SUCCESS=$[SUCCESS+1]
echo "$IP ✓"
else
FAILURE=$[FAILURE+1]
echo "$IP X"
fi
done < <(curl -sL vpn-proxy-list.txt);
echo "✓: $SUCCESS X: $FAILURE"
#/bin/ksh
成功=0
失败=0
读IP时
做
CURL=$(CURL-s-m2-x2-xhttp://$IP-Lhttp://icanhazip.com)
如果[[“${IP%%:*}”==“${CURL%%:*}”];然后
SUCCESS=$[SUCCESS+1]
echo“$IP✓"
其他的
失败=$[失败+1]
echo“$IP X”
fi
完成<您可以使用命名管道
mkfifo foobar
curl -sL vpn-proxy-list.txt > foobar &
# Maybe sleep for a while here
while read -r IP; do
# do something here
done < foobar
rm foobar
mkfifoobar
curl-sL vpn-proxy-list.txt>foobar&
#也许在这里睡一会儿
在读时-r IP;do
#在这里做点什么
完成
您可以使用命名管道
mkfifo foobar
curl -sL vpn-proxy-list.txt > foobar &
# Maybe sleep for a while here
while read -r IP; do
# do something here
done < foobar
rm foobar
mkfifoobar
curl-sL vpn-proxy-list.txt>foobar&
#也许在这里睡一会儿
在读时-r IP;do
#在这里做点什么
完成
如果在子shell中运行,则在while主体中似乎没有做任何会导致问题的事情,因此我只使用普通管道:
#!/bin/ksh
curl -sL vpn-proxy-list.txt | while read -r ip; do
output=$(curl -s -m 2 -x "http://$ip" -L http://icanhazip.com)
if [[ "${ip%%:*}" == "${output%%:*}" ]]; then
echo "$ip Y"
else
echo "$ip X"
fi
done
现在,您正在询问一些中断的问题,因为您正在子shell中进行变量更改,而这些变量在子shell退出时消失。解决方法:使用大括号分组
curl -sL vpn-proxy-list.txt | {
success=0
failure=0
while read -r ip; do
output=$(curl -s -m 2 -x "http://$ip" -L http://icanhazip.com)
if [[ "${ip%%:*}" == "${output%%:*}" ]]; then
echo "$ip Y"
let success+=1
else
echo "$ip X"
let failure+=1
fi
done
echo there were $success successes
echo there were $failure failures
}
# variables "success" and "failure" don't exist here.
如果在子shell中运行,那么您在while主体中似乎没有做任何会导致问题的事情,因此我只使用一条简单的管道:
#!/bin/ksh
curl -sL vpn-proxy-list.txt | while read -r ip; do
output=$(curl -s -m 2 -x "http://$ip" -L http://icanhazip.com)
if [[ "${ip%%:*}" == "${output%%:*}" ]]; then
echo "$ip Y"
else
echo "$ip X"
fi
done
现在,您正在询问一些中断的问题,因为您正在子shell中进行变量更改,而这些变量在子shell退出时消失。解决方法:使用大括号分组
curl -sL vpn-proxy-list.txt | {
success=0
failure=0
while read -r ip; do
output=$(curl -s -m 2 -x "http://$ip" -L http://icanhazip.com)
if [[ "${ip%%:*}" == "${output%%:*}" ]]; then
echo "$ip Y"
let success+=1
else
echo "$ip X"
let failure+=1
fi
done
echo there were $success successes
echo there were $failure failures
}
# variables "success" and "failure" don't exist here.
如果您将curl-sL vpn proxy list.txt的输出存储为变量,然后将该变量传递给while循环,那么它是否有效?这可能是在旧的Unix行上,如AIX、HP、Sun?查找ksk93或/usr/???/dtksh。当然,将#!/bin/ksh更改为匹配。祝您好运。我更新了上面的脚本,以更好地反映我的a实际脚本。我在while循环中有计数器,需要在循环外打印。到目前为止,答案对于原始问题很有效,但在计算在while循环外访问的变量时失败。如果将curl-sL vpn proxy list.txt的输出存储为变量,然后传递该v,是否有效可以改为while循环?可能这是在旧的Unix行上,如AIX、HP、Sun?查找ksk93或/usr/???/dtksh。当然,将#!/bin/ksh更改为匹配。祝你好运。我更新了上面的脚本以更好地反映我的实际脚本。我在while循环中添加了计数器,需要在循环外打印。answe到目前为止,rs对原始问题很有效,但在计算在while循环之外访问的变量时失败。前面加了#!/bin/ksh
?@Ryan您也可以添加shebang!我的错误,我没有注意到它是fifo。抱歉。好吧,我成功了,但现在我的计数器出现了问题(不是在原来的问题中,但却把我的剧本搞砸了)。我如何允许在while循环内使用计数器?并在while循环外打印这些计数器?以#!/bin/ksh
为前缀?@Ryan您也可以添加shebang!我的错误,我没有注意到它是fifo。抱歉。好吧,我已经成功了,但现在我的计数器出现了问题(不是在原来的问题中,但却把我的剧本搞砸了)。我如何允许在while循环内使用计数器?以及在while循环外打印这些计数器?我也可以让它工作,但不幸的是,我无法访问while循环内的任何计数器。你能建议一种替代方法,允许在过程中建立一些统计数据吗?谢谢。工作性能良好Thy。我也能让它工作,但不幸的是,我无法访问while循环内的任何计数器,也无法访问while循环外的任何计数器。你能建议一个替代方案,允许在这一过程中建立一些统计数据吗?谢谢。工作得很好。