【问题标题】:Cat a file with a directory including a variable doesn't work in a script - but works in shellCat 目录中包含变量的文件在脚本中不起作用 - 但在 shell 中起作用
【发布时间】: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 of ls 了解原因的背景。
  • 另外,可以关闭 glob 支持。确保在您的脚本中之前没有完成这一点很重要。
  • ls 有时可以强制管道上的 ansi 转义,这会导致这个问题。 set -x 会让它立即可见。

标签: bash shell variables logging cat


【解决方案1】:

运行脚本的用户没有正确定义变量(用于目录)。在运行 cat 之前尝试回显该变量,您可能会得到提示,提示出了什么问题?

【讨论】:

  • echo 经常具有误导性——无法区分echo "my file with spaces.txt"echo "my" "file" "with" "spaces.txt";没有办法区分echo "spaces.txt"echo "spaces.txt"$'\r'等之间的区别。最好用set -x登录。
猜你喜欢
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 2017-06-21
  • 2013-12-03
  • 2017-10-10
相关资源
最近更新 更多