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.

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.


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

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

Jednym tymczasowym rozwiązaniem może być:

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.