我正在使用迷你shell脚本,以便(实时)“拖尾”一堆日志文件。
#!/bin/sh
oldGLOBIGNORE=$GLOBIGNORE
export GLOBIGNORE='foo-bar.log'
sudo -E tail -f -n0 /var/log/*.log
GLOBIGNORE=$oldGLOBIGNORE
如您所见,我想记录除名为foo-bar.log
的文件以外的所有文件。
sudo的-E
选项应该允许我保留GLOBIGNORE
变量,但看起来它不起作用。
我正在测试Ubuntu 10.04,bash 4.1.5。
有任何线索吗?
答案 0 :(得分:3)
首先 - GLOBIGNORE
与文件名扩展产生的完整文件路径有关,而不仅仅是最后一部分。所以你实际上想写GLOBIGNORE='/var/log/foo-bar.log'
。
其次 - 您实际上不需要将GLOBIGNORE
导出到环境中并添加-E
,因为/var/log/*.log
会在调用sudo
之前被Bash扩展。
第三,你保存GLOBIGNORE
的旧值并在之后恢复它的方法不太理想,因为GLOBIGNORE
未设置时的行为与设置时的行为不同 - 但是空,并且您的脚本永远无法将其恢复为未设置状态。幸运的是,脚本没有需要来恢复它(因为它不像脚本的变量可以在脚本返回后继续生效),所以你可以删除那些东西。
总而言之,你可以写:
#!/bin/sh
GLOBIGNORE=/var/log/foo-bar.log
sudo tail -f -n0 /var/log/*.log