2012-11-08 25 views
0

我正在使用迷你shell腳本來實時「尾部」一堆日誌文件。GLOBIGNORE不能與sudo命令一起使用

#!/bin/sh 

oldGLOBIGNORE=$GLOBIGNORE 

export GLOBIGNORE='foo-bar.log' 

sudo -E tail -f -n0 /var/log/*.log 

GLOBIGNORE=$oldGLOBIGNORE 

正如你所看到的,我想記錄除名爲foo-bar.log之外的所有文件。

-E sudo的選項應該允許我保持GLOBIGNORE變量,但它看起來不起作用。

我在Ubuntu 10.04上測試,bash 4.1.5。

任何線索?

+1

是'/斌/ sh'砸向你的系統上?它並不總是...... – twalberg

回答

3

首先— GLOBIGNORE涉及文件擴展導致的完整文件路徑,而不僅僅是最後一部分。所以你實際上想寫GLOBIGNORE='/var/log/foo-bar.log'

其次—你實際上並不需要GLOBIGNORE導出到環境中,並添加-E,因爲/var/log/*.log得到由猛砸擴大它甚至調用sudo之前。

第三—你的方式來節省的GLOBIGNORE舊值並恢復它之後就是不太理想,因爲當GLOBIGNORE沒有設置的行爲是從它的行爲不同,當它被設置,但空,和你的腳本不能恢復它未被設置。幸運的是,腳本不需要需要來恢復它(因爲它不像腳本的變量在腳本返回後可能繼續有效),所以你可以刪除那些東西。

總而言之,你可以寫:

#!/bin/sh 

GLOBIGNORE=/var/log/foo-bar.log 
sudo tail -f -n0 /var/log/*.log 
+0

我直接通過名稱啓動腳本(因爲它位於'/ usr/bin'中)。我已經試過了你的第二個代碼,即使我把GLOBIGNORE = * .log,我仍然列出所有文件 – magnetik

+0

@magnetik:Re:第一句話:好的,我已經編輯了我的答案,修剪掉那些不相關的東西那。 Re:第二句:假設你的'/ bin/sh'是Bash,這個*應該*工作。你有沒有檢查過以確保'/ bin/sh'是你的系統上的Bash? – ruakh

+0

嗯,這是破折號!謝謝你的回答,解釋和下載! – magnetik