Come posso ottenere il comando tac su OS X?


59

Mi piace usare tacper invertire l'output di cat. Tuttavia, non è disponibile nel terminal Mavericks. Ho provato a trovarlo su MacPorts e di nuovo non è disponibile. Qualcuno può mostrarmi come arrivare tac? È molto utile per leggere i file di registro.

Risposte:


66

Sì:

  • Installa Homebrew
  • brew install coreutils
  • ln -s /usr/local/bin/gtac /usr/local/bin/tac apparentemente non necessario con l'ultimo Homebrew, vedi il commento di Ran Ever-Hadani di seguito

oppure usa MacPorts per installare coreutilsin modo simile.


Non capisco come ln -s /usr/local/bin/gtac /usr/local/bin/tacha funzionato ... Quel comando non dovrebbe solo elencare alcuni blocchi di memoria di file?
Timothy Swan,

1
Il link simbolico è solo per comodità. Homebrew installa i binari coreutil in / usr / local / bin aggiungendo come prefisso il loro nome originale con una 'g'. lsdiventa gls, headdiventa gheade così via. Di conseguenza, tacè installato come gtac, e il link simbolico suggerito in questa risposta è solo quello di renderlo tacdisponibile con quel nome. Omettendo il collegamento simbolico, è comunque possibile eseguire il programma come gtac.
Grebneke,

Oh. Stai parlando di ln -snon ls -sCiò rende più senso ora. Devo averlo inserito correttamente la prima volta.
Timothy Swan,

2
Aggiunta alla risposta di grebneke : non è più necessario il soft link. Il suffisso g ora viene aggiunto solo se osx ha già un comando con quel nome, quindi tac è installato come tac, non gtac.
Ha funzionato Ever-Hadani il

70

Su OS / X come su molti sistemi (BSD, Solaris, AIX, IRIX ...), la funzionalità di GNU tacè disponibile tailcon l' -r opzione . Quindi non è necessario installare GNU tac:

tail -r the-file

11
Quindi, alias tac='tail -r'farà il trucco per OP!
MK

8
Bene, in realtà l' utilizzo di un alias di shell potrebbe non riuscire perché gli alias non vengono trasferiti negli script di shell. Utilizzare una funzione cometac() { tail -r -- "$@"; }
kojiro


0

Una soluzione temporanea potrebbe essere:

alias tac='perl -e "print reverse(<>)"'

1
Questo mi ha fatto imparare che <>non solo leggeva da STDIN, ma facoltativamente da @ARGV. stackoverflow.com/questions/29020883/… Non so ancora se reversecaricherò l'intero file in memoria prima di stampare le righe in ordine inverso. Sarebbe terribile.
Bruno Bronosky,

@BrunoBronosky,> ... STDIN, ma facoltativamente da @ ARGV: sì, questo è ciò che <> serve. > ... caricherà l'intero file in memoria ...: SÌ, SARÀ! (evita di farlo con file gigabyte)
JJoao
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.