我有以下简单的脚本,我正在运行一个循环,并希望维护一个COUNTER.我无法弄清楚为什么计数器没有更新.这是由于子shell创建了吗?我怎样才能解决这个问题?
#!/bin/bash
WFY_PATH=/var/log/nginx
WFY_FILE=error.log
COUNTER=0
grep 'GET /log_' $WFY_PATH/$WFY_FILE | grep 'upstream timed out' | awk -F ', ' '{print $2,$4,$0}' | awk '{print "http://domain.com"$5"&ip="$2"&date="$7"&time="$8"&end=1"}' | awk -F '&end=1' '{print $1"&end=1"}' |
(
while read WFY_URL
do
echo $WFY_URL #Some more action
COUNTER=$((COUNTER+1))
done
)
echo $COUNTER # output = 0
Run Code Online (Sandbox Code Playgroud) 在bash(或其他shell)中是否存在某种字符限制,可以输入多长时间?如果是这样,那个字符限制是什么?
即是否可以在bash中编写一个命令行执行时间过长的命令?如果没有要求的限制,是否有建议的限制?
我尝试搜索可能包含我试图使用的空格的文件,这里-print0设置的IFS是我的脚本
IFS=$'\0';find people -name '*.svg' -print0 | while read file; do
grep '<image' $file > /dev/null && echo $file | tee -a embeded_images.txt;
done
Run Code Online (Sandbox Code Playgroud)
我尝试使所有包含嵌入图像的svg文件都很好,它在没有-print0的情况下工作,但是在一个文件中失败,所以我停止了脚本.这是一个更简单的例子,也不起作用
IFS=$'\0';find . -print0 | while read file; do echo $file; done
Run Code Online (Sandbox Code Playgroud)
它不显示任何东西.