Hal dasar yang perlu Anda pahami dalam kasus ini antara kedua cara pengalihan (> dan >>) adalah:
>
Arahkan ulang dan timpa informasi ke tempat yang ditunjuk. Ini terjadi ketika menerima informasi apa pun melalui pipa "|"
>>
Arahkan ulang dan menyatukan informasi yang ditunjuk. Ini terjadi ketika menerima informasi apa pun melalui pipa "|"
Dalam kedua kasus jika file tidak ada, itu akan dibuat sebagai gantinya. Hanya pada ">>" informasi akan digabungkan jika Anda menjalankannya lagi pada file yang sama. Dengan ">" Anda hanya akan menimpa semua yang Anda lakukan pada jalankan pertama.
Tapi di sini adalah kesepakatan ketika menggunakan file input yang sama dengan file output. Dalam kasus khusus itu, jika Anda menggunakan ">" Anda akan menghapus informasi yang bagian "input" perlu parsing, karena file output akan "menimpa itu". Jadi di:
rev file.txt | cat > file.txt
Apa yang sebenarnya terjadi dalam "penjelasan gerak lambat" adalah:
revbersiap untuk membalikkan konten file.txtdan mengirimkannya ke pipa
- Saat
revmengirim informasi ke pipa, pipa mengalirkannya langsung ke cat.
- Saat
catmenerima informasi, ia akan secara otomatis menerapkannya ke informasi file.txtyang telah ditentukan sebelumnya.
- Kata kunci di sini adalah "sementara", karena semuanya terjadi pada saat yang bersamaan. Silakan lihat komentar luar biasa di bawah ini oleh Emil untuk memiliki pemahaman yang lebih dalam pada bagian ini.
cattidak akan menunggu untuk revmem-pipe seluruh file. Ini hanya akan mulai saat bagian pertama dari informasi sampai ke sana, yang berarti, tergantung pada simbol apa yang Anda gunakan, itu akan membuka koneksi file.txt.
- Dalam hal ini karena Anda menggunakan > alih-alih >> , shell akan memotong file output yang artinya akan membuka dan menghapus informasi
file.txtsambil menunggu informasi baru untuk sampai ke sana. Dengan >> itu akan membuka koneksi dengan file.txtdan menunggu informasi baru pada baris terakhir terdeteksi.
- Karena informasi sudah dikosongkan
file.txtdengan > , revakan mencoba melakukannya dan tidak mendapatkan apa-apa karena catmenghapus semuanya sebagai persiapan untuk informasi baru.
Jadi mengapa yang lain bekerja setelah membaca di atas. Karena ini:
rev file.txt | cat > file2.txt && mv file.txt file2.txt
Di sini Anda mengirim piping ke kucing yang mengirimkan informasi ke file lain . Dalam hal ini, file input yang diproses file.txttidak sama dengan file output file2.txt. Setelah itu Anda benar-benar Timpa seluruh file2.txtdengan file.txt, sehingga semua proses yang dilakukan oleh cattelah dihapus. Pada dasarnya seluruh baris dapat disederhanakan seperti cp file.txt file2.txtkarena ia melakukan hal yang sama karena file2.txtpada akhirnya kehilangan revdan ditimpa dengan mvperintah.
rev file.txt | cat >> file.txt
Dalam hal ini Anda menggabungkan informasi ke file yang sama. Jadi itu hanya membuka koneksi ke file itu tetapi tidak menghapus informasi seperti yang terlihat dengan satu > . Hasil akhirnya seharusnya, informasi asli ditambah informasi terbalik.
catkeluar seperti ini:rev file.txt > file2.txt && mv file2.txt file.txt. Ini adalah penggunaan berlebihancat. Dengan membiarkannya, Anda membiarkan proses ekstra.