2014-06-16 18 views
5

Sto provando a creare un alias bash che stamperà il timestamp UNIX corrente ogni volta che viene chiamato l'alias. Ho il seguente nel mio profilo bash:Bash alias crea il file con data/ora corrente nel nome file

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

Tuttavia, sembra che l'attuale timestamp Unix viene memorizzato non appena il profilo di bash è di provenienza, e non cambia ogni volta che l'alias viene chiamato.

Ad esempio, se chiamo l'alias unix per tre volte 10 secondi, l'output è sempre lo stesso. Come posso creare un alias che valuterà il timestamp unix nel momento in cui viene chiamato l'alias. È possibile?

risposta

10

Usa virgolette singole per prevenire l'espansione immediata.

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

Update: Mentre io sono felice di essere stato in grado di spiegare il comportamento di espansione diverso tra virgolette singole e doppie, vedere anche l'altra risposta, da Robby Cornelissen, per un modo più efficiente per ottenere lo stesso risultato. Lo echo non è necessario qui poiché emette solo ciò che date già emetterebbe da solo. Pertanto, non è necessario eseguire date in una sottoshell.

+0

Ha lavorato alla grande grazie. Non mi permetterà di accettare la tua risposta per altri 7 minuti, ma lo farò. – flyingL123

+0

Inoltre, solo per le risatine, si potrebbe ottenere lo stesso con le virgolette evitando il $, che impedirebbe anche l'espansione immediata: 'alias unix =" echo \ $ (date +% s) "'. –

+0

+1 per spiegare il problema dell'OP. – 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 per una soluzione più elegante (sebbene il problema dell'OP non sia spiegato). – mklement0

Problemi correlati