Jika saya mengerti cat
manual dengan benar:
menggabungkan file dan mencetak pada output standar
cat
akan mengambil file sebagai argumen dan mencetaknya pada output standar.
Yang tidak saya dapatkan adalah jika saya menggunakan perintah:
cat img.png > copy.png
Saya akan mendapatkan 2 file png identik sedangkan jika saya hanya
cat img.png
Saya memiliki semua kemungkinan terminal saya menjadi kacau dan salah mengartikan apa yang saya ketik.
- Bagaimana mungkin?
- Nilai biner masih merupakan data biner. Mengapa tidak hanya menunjukkan serangkaian 0 dan 1 atau interpretasi data biner tersebut di ASCII atau apa pun pengkodean di terminal?
- Apakah perilaku ini juga dimungkinkan oleh
cat
ing file teks yang berisi karakter aneh? - Haruskah mekanisme untuk mencegah perilaku ini seperti pernyataan try{}catch{} harus diimplementasikan?
Jawaban yang Diterima:
cat
menggabungkan file yang diberikan sebagai argumen pada baris perintah ke output standar, ia membaca byte pada satu waktu dan sebagai default tidak melakukan interpretasi apa pun dari byte yang dibacanya.
Dalam contoh pertama Anda, Anda mengarahkan stdout ke file, itu sebabnya Anda mendapatkan file baru.
Dalam contoh kedua Anda, byte ditulis ke terminal, dan terminallah yang menafsirkan urutan karakter sebagai urutan kontrol untuk terminal, inilah mengapa Anda mendapatkan perilaku yang tidak biasa di terminal Anda. Ini tidak ada hubungannya dengan cat
dengan demikian, cat
tidak tahu apa yang akan Anda lakukan dengan outputnya. Anda mungkin mengirimkannya melalui pipa ke program lain untuk menafsirkan/memproses/mencetak atau memainkan “Menyanyi dalam hujan”.
Jadi mengikuti filosofi unix,
lakukan satu hal, lakukan satu hal saja, tetapi lakukan dengan baik
cat
tidak boleh mencoba menebak-nebak apa yang Anda coba lakukan.
edit 1 balasan untuk komentar pertama @kiwy di bawah.
Ya dan Tidak, izinkan saya menjelaskan,
Tidak, jika Anda cat
ke terminal, karena itu (perangkat lunak terminal) mengirimkan output ke layar Anda atau menafsirkan urutan kontrol (ini meniru perangkat keras lama yaitu perangkat teletipe ).
tapi,
Ya, jika Anda menggunakan pipa dan program yang menerima dapat menginterpretasikan karakter sebagai perintah.
Terkait:Dapatkan daftar semua file dengan topeng di terminal?
lihat cat ini sebagai contoh, cat anyOldShellScript | bash
bash akan menafsirkan apa yang didapatnya sebagai perintah.