2009-12-07 9 views

Odpowiedz

19

można użyć tego:

LOGFILE=$(LOGPATH) `date +'%y.%m.%d %H:%M:%S'` 
+3

Nie będzie to przyczyna LOGFILE być evaulated każdym razem jest ona wykorzystywana. Na przykład LOGFILE = logi/'Data + '% r% m% d% H:..% M:% S'' echo_logs: echo $ (LOGFILE) 5S snu echa $ ($ LOGFILE) drukuje. kłody echa/'data + '% r% m% d% H:.% M:% S'' logs/10.01.28-14: 21: 08 spać 5s dzienniki echa/'data + '% y.% m.% d-% H:% M:% S'' logs/10.01.28-14: 21: 13 – Aaron

+4

@Aaron: Masz rację; aby tego uniknąć, można użyć funkcji 'shell' zamiast backticks:' LOGFILE = $ (LOGPATH) $ (data powłoki) ' – catwalk

+1

Uzgodniona i dla kompletności: LOGFILE = $ (LOGPATH) $ (data powłoki + '% Y % m.% d%% H:% M:% S '). Działa również w systemie Solaris. – anisbet

24

Musisz użyć polecenia $ (shell) działanie w makijażu. Jeśli użyjesz operation, polecenie powłoki zostanie ocenione za każdym razem. Jeśli piszesz do pliku dziennika, nie chcesz, aby nazwa pliku dziennika zmieniała się za każdym razem, gdy uzyskujesz dostęp do niego za pomocą pojedynczego polecenia make.

LOGPATH = logs 
LOGFILE = $(LOGPATH)/$(shell date --iso=seconds) 

test_logfile: 
    echo $(LOGFILE) 
    sleep 2s 
    echo $(LOGFILE) 

Wyjście to będzie:

echo logs/2010-01-28T14:29:14-0800 
logs/2010-01-28T14:29:14-0800 
sleep 2s 
echo logs/2010-01-28T14:29:14-0800 
logs/2010-01-28T14:29:14-0800 
+2

Ale to nie jest takie samo na innym celu. –