Comment puis-je obtenir la commande tac sur OS X?


59

J'aime utiliser tacpour inverser la sortie de cat. Cependant, il n'est pas disponible dans le terminal Mavericks. J'ai essayé de le trouver sur MacPorts et encore une fois, ce n'est pas disponible. Quelqu'un peut-il s'il vous plaît me montrer comment obtenir tac? C'est très utile pour lire les fichiers de log.

Réponses:


66

Oui:

  • Installer Homebrew
  • brew install coreutils
  • ln -s /usr/local/bin/gtac /usr/local/bin/tac apparemment pas nécessaire avec le dernier Homebrew, voir le commentaire de Ran Ever-Hadani ci-dessous

ou utilisez MacPorts pour installer coreutilsde la même manière.


Je ne comprends pas comment ln -s /usr/local/bin/gtac /usr/local/bin/taccela a fonctionné ... Cette commande n'est-elle pas uniquement censée répertorier des blocs de mémoire de fichier?
Timothy Swan

1
Le lien symbolique est juste pour plus de commodité. Homebrew installe les fichiers binaires coreutil dans / usr / local / bin en préfixant leur nom d'origine par un «g». lsdevient gls, headdevient gheadet ainsi de suite. Par conséquent, tacest installé en tant que gtac, et le lien symbolique suggéré dans cette réponse est juste pour le rendre tacdisponible sous ce nom. En omettant le lien symbolique, vous pouvez toujours exécuter le programme en tant que gtac.
grebneke

Oh. Vous parlez de ln -spas ls -sCela a plus de sens maintenant. Je dois l'avoir entré correctement la première fois.
Timothy Swan

2
Ajout à la réponse de grebneke : plus besoin du lien logiciel. Le suffixe g n'est maintenant ajouté que si osx a déjà une commande portant ce nom. Tac est donc installé en tant que tac, pas gtac.
Ran Ever-Hadani

70

Sur OS / X comme sur de nombreux systèmes (BSD, Solaris, AIX, IRIX ...), les fonctionnalités de GNU tacsont disponibles tailavec l' -r option . Donc, pas besoin d'installer GNU tac:

tail -r the-file

11
Alors, alias tac='tail -r'va faire le tour pour OP!
mkc

8
En fait, l’ utilisation d’un alias de shell peut échouer car les alias ne sont pas transférés dans des scripts de shell. Utilisez une fonction commetac() { tail -r -- "$@"; }
kojiro


0

Une solution temporaire pourrait être:

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

1
Cela vient de me faire apprendre que <>non seulement lire à partir de STDIN, mais éventuellement à partir de @ARGV. stackoverflow.com/questions/29020883/… Je ne sais toujours pas si reversele fichier entier sera chargé dans la mémoire avant la sortie des lignes dans l'ordre inverse. Ce serait terrible.
Bruno Bronosky

@BrunoBronosky,> ... STDIN, mais facultativement de @ ARGV: oui, c'est à quoi <> est destiné. > ... chargera l'intégralité du fichier en mémoire ...: (évitez de faire cela avec des fichiers gigaoctets)
JJoao
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.