Bagaimana saya bisa mendapatkan perintah tac di OS X?

59

Saya suka menggunakan tacuntuk membalikkan output dari cat. Namun, itu tidak tersedia di terminal Mavericks. Saya mencoba menemukannya di MacPorts dan lagi tidak tersedia. Adakah yang bisa tunjukkan padaku bagaimana cara mendapatkannya tac? Ini sangat membantu untuk membaca file log.

mempolarisasikan
sumber

Jawaban:

66

Iya:

  • Instal Homebrew
  • brew install coreutils
  • ln -s /usr/local/bin/gtac /usr/local/bin/tac rupanya tidak diperlukan dengan Homebrew terbaru, lihat komentar oleh Ran Ever-Hadani di bawah ini

atau gunakan MacPorts untuk menginstal coreutilsdengan cara yang serupa.

grebneke
sumber
Saya tidak mengerti bagaimana ln -s /usr/local/bin/gtac /usr/local/bin/tacmembuatnya bekerja ... Bukankah perintah itu hanya untuk membuat daftar beberapa blok memori file?
Timothy Swan
1
Symlink hanya untuk kenyamanan. Homebrew menginstal binari coreutil di / usr / local / bin dengan mengawali nama aslinya dengan 'g'. lsmenjadi gls, headmenjadi gheaddan seterusnya. Akibatnya, tacdipasang sebagai gtac, dan symlink yang disarankan dalam jawaban ini hanya untuk membuat tactersedia dengan nama itu. Menghilangkan symlink, Anda masih dapat menjalankan program sebagai gtac.
grebneke
Oh Anda sedang berbicara tentang ln -stidak. ls -sIni lebih masuk akal sekarang. Saya harus memasukkannya dengan benar saat pertama kali.
Timothy Swan
2
Tambahan untuk jawaban grebneke : tidak perlu tautan lunak lagi. Akhiran g sekarang hanya ditambahkan jika osx sudah memiliki perintah dengan nama itu, jadi tac diinstal sebagai tac, bukan gtac.
Ran Ever-Hadani
70

Pada OS / X seperti pada banyak sistem (BSD, Solaris, AIX, IRIX ...), fungsionalitas GNU tactersedia taildengan -r opsi . Jadi tidak perlu menginstal GNU tac:

tail -r the-file
Stéphane Chazelas
sumber
11
Jadi, alias tac='tail -r'akan melakukan trik untuk OP!
mkc
8
Yah, sebenarnya menggunakan alias shell mungkin gagal karena alias tidak ditransfer ke skrip shell. Gunakan fungsi sepertitac() { tail -r -- "$@"; }
kojiro
0

Instal gnu coreutils yang sudah dikompilasi dengan Rudix :

sudo rudix install coreutils

Atau unduh dan instal Rudix coreutils

dkmillares
sumber
0

Satu solusi sementara bisa berupa:

alias tac='perl -e "print reverse(<>)"'
Joao
sumber
1
Ini hanya membuat saya belajar bahwa <>tidak hanya membaca dari STDIN, tetapi juga opsional dari @ARGV. stackoverflow.com/questions/29020883/... Saya masih tidak tahu apakah reverseakan memuat seluruh file ke dalam memori sebelum mengeluarkan baris dalam urutan terbalik. Itu akan mengerikan.
Bruno Bronosky
@BrunoBronosky,> ... STDIN, tetapi secara opsional dari @ ARGV: ya itulah gunanya <>. > ... akan memuat seluruh file ke dalam memori ...: YA, ITU AKAN! (hindari melakukan ini dengan file gigabyte)
JJoao