Jak mogę uzyskać komendę tac w systemie OS X?

59

Lubię używać tacdo odwracania wyjścia cat. Jednak nie jest dostępny w terminalu Mavericks. Próbowałem znaleźć go na MacPorts i znowu nie jest dostępny. Czy ktoś może mi pokazać, jak zdobyć tac? Jest to bardzo pomocne do odczytu plików dziennika.

polaryzować
źródło

Odpowiedzi:

65

Tak:

  • Zainstaluj Homebrew
  • brew install coreutils
  • ln -s /usr/local/bin/gtac /usr/local/bin/tac najwyraźniej nie jest potrzebny w najnowszym Homebrew, patrz komentarz Ran Ever-Hadani poniżej

lub użyj MacPorts, aby zainstalować coreutilsw podobny sposób.

grebneke
źródło
Nie rozumiem, jak ln -s /usr/local/bin/gtac /usr/local/bin/tacto zadziałało ... Czy to polecenie nie powinno tylko wyświetlać bloków pamięci plików?
Timothy Swan
1
Dowiązanie symboliczne jest tylko dla wygody. Homebrew instaluje pliki binarne coreutil w / usr / local / bin, poprzedzając ich oryginalną nazwę literą „g”. lsstaje się gls, headstaje się gheadi tak dalej. W związku z tym tacjest instalowany jako gtac, a dowiązanie symboliczne sugerowane w tej odpowiedzi ma tylko tacudostępnić pod tą nazwą. Pomijając dowiązanie symboliczne, nadal możesz uruchomić program jako gtac.
grebneke
O. Mówisz, że ln -snie. ls -sTo ma teraz większy sens. Musiałem go poprawnie wprowadzić za pierwszym razem.
Timothy Swan
2
Dodatek do odpowiedzi grebneke : nie potrzebujesz już miękkiego linku. Sufiks g jest teraz dodawany tylko wtedy, gdy osx ma już polecenie o tej nazwie, więc tac jest instalowany jako tac, a nie gtac.
Ran Ever-Hadani
69

W OS / X, podobnie jak w wielu systemach (BSD, Solaris, AIX, IRIX ...), funkcjonalność GNU tacjest dostępna tailz -r opcją . Nie ma więc potrzeby instalowania GNU tac:

tail -r the-file
Stéphane Chazelas
źródło
11
Więc alias tac='tail -r'zrobi lewę dla OP!
mkc
8
Właściwie użycie aliasu powłoki może się nie powieść, ponieważ aliasy nie są przenoszone do skryptów powłoki. Użyj funkcji takiej jaktac() { tail -r -- "$@"; }
kojiro
0

Zainstaluj jądra GNU skompilowane już z Rudix :

sudo rudix install coreutils

Lub pobierz i zainstaluj GUI Coreutils

dkmillares
źródło
0

Jednym tymczasowym rozwiązaniem może być:

alias tac='perl -e "print reverse(<>)"'
JJoao
źródło
1
To właśnie spowodowało, że nauczyłem się, że <>nie tylko czytam ze STDIN, ale opcjonalnie z @ARGV. stackoverflow.com/questions/29020883/ ... Nadal nie wiem, czy reversezaładuje cały plik do pamięci przed wypisaniem wierszy w odwrotnej kolejności. To byłoby okropne.
Bruno Bronosky
@BrunoBronosky,> ... STDIN, ale opcjonalnie z @ ARGV: tak, po to jest <>. > ... załaduje cały plik do pamięci ...: TAK, BĘDZIE! (unikaj robienia tego z plikami gigabajtowymi)
JJoao