我有一个 docker 容器将日志文件写入名称卷。
我想从主机分析日志文件并搜索给定的日志消息。但是当我访问“docker检查VOLUMNAME”给出的文件夹时,我得到了奇怪的行为,我不明白。
例如以下命令确实给出空行作为输出:
$ sudo bash -c "for logfile in /var/lib/docker/volumes/design-db-logs/_data/*/*; do echo ${logfile}; done"
$
可能是什么原因?
您的本地 shell 在循环发生之前正在扩展双引号内的变量扩展。将双引号更改为单引号。
也就是说,当你跑步时
sudo bash -c "for ... ; do echo ${logfile}; done"
首先,本地 shell 将变量引用替换为本地环境设置的任何内容
$logfile
,可能什么都没有
sudo bash -c 'for ...; do echo ; done'
然后它运行该命令。如果您最初将其更改为单引号
sudo bash -c 'for ... ; do echo ${logfile}; done'
它将避免这种扩展。
只需将
echo
一词放在命令前面即可看到这一点:shell 将进行扩展,然后 echo
将打印出将要运行的命令。