我正在尝试在bash脚本中执行此命令
find /var/log/apache2/access*.gz -type f -newer ./tmpoldfile ! -newer ./tmpnewfile | xargs zcat | grep -E '$MONTH\/$YEAR.*GET.*ad=$ADVERTISER HTTP\/1' -c
如果我直接执行它或将其分配给变量,则返回0
但是如果我对命令进行回显(用脚本替换变量)并在命令行中执行它就可以了。
echo "find /var/log/apache2/access*.gz -type f -newer ./tmpoldfile ! -newer ./tmpnewfile | xargs zcat | grep -E '$MONTH\/$YEAR.*GET.*ad=$ADVERTISER HTTP\/1' -c"
如何对我的代码进行编码
答案 0 :(得分:1)
变量不会在单引号内扩展,即'... $ NOT_EXPANDED ...'。尝试
find /var/log/apache2/access*.gz -type f -newer ./tmpoldfile ! -newer ./tmpnewfile \
| xargs zcat | grep -E "$MONTH\/$YEAR.*GET.*ad=$ADVERTISER HTTP\/1" -c
# newstuff ------------^------------------------------------------^-----------
相同的“或将其分配给变量”
varCount=$(find /var/log/apache2/access*.gz -type f -newer ./tmpoldfile ! -newer ./tmpnewfile \
| xargs zcat | grep -E "$MONTH\/$YEAR.*GET.*ad=$ADVERTISER HTTP\/1" -c )
另外,我必须对-exec
发表评论。许多人发现现在支持find ... -exec ... \+
,这是(我假设)相当于xargs
,但并非所有操作系统都将GNU作为他们的第一个工具。如果您确定永远不会在Solaris,AIX或HPUX商店中工作,那么请使用改进的功能。此外,如果您使用新操作系统,那么xargs
可能支持并行处理,我认为find ... -exec ... \+
不会这样做。
我希望这会有所帮助。