2014-06-16 10 views
5

Próbuję utworzyć alias bash, który będzie drukować bieżący znacznik czasu UNIX za każdym razem, gdy jest wywoływany alias. Mam następujących w moim profilu bash:Alias ​​bash utworzyć plik z bieżącym znacznikiem czasu w nazwie pliku

alias unix="echo "$(date +%s)"" 

Wydaje się jednak, że obecny unix timestamp jest przechowywany jak najszybciej profil bash pochodzi, i to nie zmienia za każdym razem, alias jest tzw.

Na przykład, jeśli wywołuję alias unix trzy razy w odstępie 10 sekund, wynik jest zawsze taki sam. Jak mogę utworzyć alias, który oceni czasowy znacznik uniksowy w momencie wywołania aliasu. czy to możliwe?

Odpowiedz

10

apostrofów aby zapobiec natychmiastowej ekspansji.

alias unix='echo $(date +%s)' 

Aktualizacja: A ja jestem zadowolony, że udało nam się wyjaśnić różne zachowania rozszerzalności między pojedyncze i podwójne cudzysłowy, proszę zobaczyć również drugą odpowiedź, Robby Cornelissen, bardziej efektywny sposób, aby uzyskać ten sam wynik. echo jest tutaj niepotrzebny, ponieważ wyprowadza tylko to, co już samo wyprowadził. W związku z tym date nie trzeba uruchamiać w podpowłoce.

+0

Pracowałem wielkie dzięki. Nie pozwoli mi zaakceptować twojej odpowiedzi przez kolejne 7 minut, ale zrobię to. – flyingL123

+0

Również dla chichotu można osiągnąć to samo z podwójnymi cudzysłowami, uciekając przed $, co również zapobiegnie natychmiastowemu rozszerzeniu: 'alias unix =" echo \ $ (data +% s) "'. –

+0

+1 za wyjaśnienie problemu PO. – mklement0

2

$ alias unix="date +%s" 
$ touch myfile.$(unix) 
$ touch myfile.$(unix) 
$ ls -l myfile* 
-rw-r--r-- 1 rbednark wheel 0 Apr 11 21:46 myfile.1460436366 
-rw-r--r-- 1 rbednark wheel 0 Apr 11 21:46 myfile.1460436368 
+0

+1 dla bardziej eleganckiego rozwiązania (chociaż problem OP nie jest wyjaśniony). – mklement0

Powiązane problemy