Jika saya mengerti cat
manualnya dengan benar:
menyatukan 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 sementara jika saya hanya
cat img.png
Saya memiliki semua kemungkinan terminal saya menjadi kacau dan salah menafsirkan apa yang saya ketik.
- Bagaimana itu mungkin?
- Nilai biner masih berupa data biner. Mengapa tidak hanya menunjukkan serangkaian 0 dan 1 atau interpretasi dari data biner di ASCII atau apa pun pengkodean di terminal?
- Apakah perilaku ini juga dimungkinkan dengan
cat
memasukkan file teks yang berisi karakter aneh? - Haruskah mekanisme untuk mencegah perilaku ini seperti pernyataan coba {} catch {} harus diterapkan?
reset
perintah kadang-kadang bisa membantu, tetapi ini bukan solusi ajaib.reset
danreset
antara penekanan tombol Ctrl-J? Saya tidak dapat melihat (atau alasan untuk melakukan hal yang lebih rumit)Jawaban:
cat
menggabungkan file yang diberikan sebagai argumen pada baris perintah ke output standar, ia membaca byte pada suatu waktu dan default tidak melakukan interpretasi dari byte yang dibaca.Dalam contoh pertama Anda, Anda mengarahkan stdout ke file, itu sebabnya Anda mendapatkan file baru.
Dalam contoh kedua Anda byte ditulis ke terminal, dan itu adalah terminal yang menafsirkan urutan karakter sebagai urutan kontrol untuk terminal, ini sebabnya Anda mendapatkan perilaku yang tidak biasa pada terminal Anda. Ini tidak ada hubungannya dengan
cat
itu,cat
tidak tahu apa yang akan Anda lakukan dengan output itu. Anda mungkin mengirimnya melalui pipa ke program lain untuk menginterpretasikan / memproses / mencetak atau memainkan "Bernyanyi di tengah hujan".Jadi mengikuti filosofi unix,
cat
jangan mencoba menebak apa yang Anda coba lakukan.sunting 1 balasan ke komentar pertama @ kiwy di bawah ini.
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 (itu meniru perangkat keras lama yaitu perangkat teletype ).tapi,
Ya jika Anda menggunakan pipa dan program penerima dapat menafsirkan karakter sebagai perintah.
lihat cat ini sebagai contoh,
cat anyOldShellScript | bash
bash akan menafsirkan apa yang didapat sebagai perintah.sumber
cat
file biner yang mungkin berisi instruksi teks biasa sepertirm -rf .
ini dapat ditafsirkan?echo
outputnya jika Anda mau. Lihat stackoverflow.com/questions/5947742/… untuk cara melakukannya dan termsys.demon.co.uk/vtansi.htm untuk mengetahui beberapa hal yang mungkinSaya kira ini terjadi terutama karena karakter yang tidak dapat dicetak dengan kode di bawah 0x20. Itu adalah kode kontrol / pelarian khusus, yang digunakan untuk kunci seperti Backspace, Hapus dll.
sumber