【发布时间】:2017-10-09 13:11:33
【问题描述】:
当我将变量TS3LOG 设置为~/DockerData/ts3/ 下的第一个目录,然后使用该变量从该目录中查找以_1.log 结尾的日志时;
TS3LOG=$(ls -1t ~/DockerData/ts3/ | head -1)
cat `/bin/ls -1td ~/DockerData/ts3/$TS3LOG/logs/*_1.log| /usr/bin/head -n1`
这是我得到的错误;
cat: '/home/docker/DockerData/ts3/ts3-jws3cffJBQwn5QIc/logs/*_1.log': No such file or directory
但是,一旦我退出脚本并尝试使用与脚本失败的命令相同的命令cat,我会得到以下信息(以及来自日志的更多信息,我不会让你厌烦)
docker@dockerbox:~/docker-ts3$ cat /home/docker/DockerData/ts3/ts3-
jws3cffJBQwn5QIc/logs/*_1.log
2017-05-10 18:17:10.363462|INFO |VirtualServer |1 |listening on
0.0.0.0:9987, :::9987
我已尝试使用wait 确保在脚本尝试捕获文件之前已创建文件,但没有任何运气。
这里有人有什么好主意吗?
提前致谢。
【问题讨论】:
-
使用
ls -t通常是个坏主意。请参阅 BashFAQ #3 了解最佳实践替代方案,并参阅 Why you shouldn't parse the output ofls了解原因的背景。 -
另外,可以关闭 glob 支持。确保在您的脚本中之前没有完成这一点很重要。
-
ls有时可以强制管道上的 ansi 转义,这会导致这个问题。set -x会让它立即可见。
标签: bash shell variables logging cat