Filsafat UNIX mengatakan: lakukan satu hal dan lakukan dengan baik. Buat program yang menangani teks, karena itu adalah antarmuka universal.
The sort
perintah, setidaknya GNU semacam, memiliki -o
pilihan untuk output ke file bukan stdout
. Mengapa, katakanlah, sort foobar -o whatever
berguna ketika saya bisa saja sort foobar > whatever
?
sort
unix-philosophy
strugee
sumber
sumber
Jawaban:
Bukan hanya jenis GNU yang memilikinya. BSD sort memilikinya juga. Dan mengapa?
(Saya pikir itu juga pertanyaan yang bagus ...)
Dari halaman manual: "Argumen yang diberikan adalah nama file output yang akan digunakan alih-alih output standar. File ini bisa sama dengan salah satu file input."
Anda tidak dapat pergi ke file yang sama dengan redirection, redirection output menghapus file.
Untuk lebih memperjelas, jika saya ingin menyortir file dan meletakkan hasil yang diurutkan di tempat yang sama saya mungkin berpikir untuk mencoba
sort < foo > foo
. Kecuali redirection output memotong filefoo
dalam persiapan untuk menerima output. Dan kemudian tidak ada yang disortir. Tanpa "-o" cara untuk melakukannya adalahsort < foo > bar ; mv bar foo
. Saya menganggap-o
opsi melakukan sesuatu yang serupa tanpa membuat Anda harus khawatir tentang hal itu.sumber
sudo sort -o /some/place
mengetahui bahwa pengguna non-privleged Anda tidak memiliki izin untuk menulis.sponge
(bagian dari moreutils). Untuk pengalihan hak istimewa ada perpipaan| sudo tee
, yang juga memiliki manfaat membatasi eskalasi hak istimewa untuk satu program sederhanatee
,.-o
opsisort
ada jauh sebelum spons melakukannya. Setidaknya setua 4.4-lite2 (yang merupakan awal sejarah OpenBSD CVS). Dan untuk kasus di mana Anda beroperasi pada file non-istimewa dan menulis ke daerah istimewa,| sudo tee
bekerja dengan baik, tetapi untuk sebagian besar waktu, Anda ingin semuanya menjadi istimewa, dan membuatsudo
Anda tersandung. Dansudo grep file | sudo tee
itu konyol.sort
perlu membaca seluruh input sebelum dapat mulai mengeluarkan apa pun, itu sebabnya ia dapat dengan aman menimpa inputnya. Ini dapat menyimpan data dalam memori atau dalam file sementara sebelum mulai menghasilkan.The '-o' pilihan sudah di dalam
sort
dari Edisi Keenam UnixNamun saya setuju dengan Anda bahwa itu tidak ada dalam filosofi Unix.
uniq
tidak memiliki opsi itu (dansort
tidak memiliki-u
itu).Pada PDP-11 saya, saya menggunakan program kecil yang akan mengambil satu parameter:
Jika
whatever
sudah ada, itu akan menulis semuanya dari stdin ke file sementara, yang hanya diubah namanyawhatever
setelah input stdin mengering. Dengan cara itu Anda bisa menyalurkan output dari perintah apa pun kerenac
alih-alih mengarahkan ulang ke nama file tanpa kemungkinan menimpa input. Memecahkan masalah penulisan ulang dengan cara itu adalah IMHO lebih sesuai dengan filosofi Unix.Beberapa tambahan selanjutnya untuk program ini adalah: tidak menimpa file keluaran jika tidak ada yang tiba pada stdin (misalnya hasil salah ketik bagian dari commandline), dan memungkinkan opsi untuk menambahkan stdin ke file yang disebutkan.
Ini adalah salah satu yang pertama (jika bukan yang pertama) program C nyata yang saya buat (untuk pekerjaan saya, saya sebagian besar dikembangkan di Pascal pada sistem itu).
sumber
apt
orang-orang GNU / Linux yang beraroma dapat memiliki versi fungsionalitas yang ditulis ulang yangrenac
disediakan, dengan sebuah program yang disebutsponge
(dariman
: menyerap input standar dan menulis ke file), package
moreutils`.sponge
jugamoreutils
dibuat oleh GNU.