Як я можу отримати команду tac в OS X?


59

Мені подобається використовувати tacдля зворотного виводу cat. Однак він недоступний у терміналі Mavericks. Я спробував знайти його на MacPorts, і знову це недоступно. Може хто-небудь, будь ласка, покажіть мені, як дістатися tac? Це дуже корисно для читання файлів журналів.

Відповіді:


65

Так:

  • Встановити Homebrew
  • brew install coreutils
  • ln -s /usr/local/bin/gtac /usr/local/bin/tac Мабуть, не потрібна остання домашня мова, дивіться коментар Ран Евер-Хадані нижче

або використовувати MacPorts для встановлення coreutilsаналогічним чином.


Я не розумію, як ln -s /usr/local/bin/gtac /usr/local/bin/tacце спрацювало ... Чи не повинна ця команда перелічити лише деякі блоки пам'яті файлів?
Тимофій Лебедь

1
Симпосилання - це просто для зручності. Homebrew встановлює бінарні файли coreutil у / usr / local / bin, префіксуючи своє початкове ім'я знаком 'g'. lsстає gls, headстає gheadтощо. Отже, tacвстановлено як gtac, і символьне посилання, запропоноване в цій відповіді, просто зробити tacдоступним під цим іменем. Пропустивши символьне посилання, ви все одно можете запустити програму як gtac.
grebneke

Ой. Ви говорите ln -sне про ls -sЦе зараз має більше сенсу. Я, мабуть, ввів її правильно вперше.
Тимофій Лебедь

2
Доповнення до відповіді grebneke : більше не потрібно м'якого посилання. Суфікс g тепер додається лише в тому випадку, якщо в OSX вже є команда з цим ім'ям, тому tac встановлюється як tac, а не gtac.
Ран Евер-Хадані

69

У ОС / X, як у багатьох системах (BSD, Solaris, AIX, IRIX ...), функціональність GNU tacдоступна в комплекті tailз цією -r опцією . Тому не потрібно встановлювати GNU tac:

tail -r the-file

11
Отже, alias tac='tail -r'зробимо трюк для ОП!
mkc

8
Ну, власне використання псевдоніму оболонки може не вдатися, оскільки псевдоніми не переносяться в сценарії оболонки. Використовуйте таку функцію, якtac() { tail -r -- "$@"; }
kojiro


0

Одним з тимчасових рішень може бути:

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

1
Це просто змусило мене дізнатися, що <>читає не тільки зі STDIN, але й необов'язково з @ARGV. stackoverflow.com/questions/29020883/… Я досі не знаю, чи reverseзавантажуватимуть цілий файл у пам'ять перед виведенням рядків у зворотному порядку. Це було б жахливо.
Бруно Броноський

@BrunoBronosky,> ... STDIN, але необов'язково від @ ARGV: так, для чого <>. > ... завантажуватиме весь файл в пам'ять ...: ТАК, БУДЕ! (уникайте цього з гігабайтними файлами)
JJoao
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.