GLOBIGNORE不适用于sudo命令

时间:2012-11-08 16:46:34

标签: bash sudo tail

我正在使用迷你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。

有任何线索吗?

1 个答案:

答案 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