GNU/Linux >> Belajar Linux >  >> Linux

Pengalihan Io Dan Perintah Kepala?

Saya mencoba mengedit .hgignore dengan cepat file dari bash Shell Cygwin hari ini, dan saya menambahkan baris yang merupakan kesalahan. Saya tidak yakin apakah ini cara terbaik untuk melakukannya, tetapi saya segera berpikir untuk menggunakan head -1 .hgignore untuk menghapus baris yang menyinggung (saya sebelumnya hanya memiliki satu baris dalam file). Benar saja, ketika dijalankan ia memberikan baris pertama sebagai satu-satunya keluaran.

Tetapi ketika saya mencoba mengarahkan ulang output dan menulis ulang file menggunakan head -1 .hgignore > .hgignore , file itu kosong. Mengapa ini terjadi? Jika saya mencoba menambahkan, head -1 .hgignore >> .hgignore , itu ditambahkan dengan benar tetapi ini jelas bukan hasil yang diinginkan. Mengapa pengalihan terpotong tidak berfungsi dalam kasus ini?

Jawaban yang Diterima:

Ketika shell mendapat baris perintah seperti:command > file.out shell itu sendiri membuka (dan mungkin membuat) file bernama file.out . Shell mengatur deskriptor file 0 ke deskriptor file file yang didapatnya dari pembukaan. Begitulah cara kerja pengalihan I/O:setiap proses mengetahui tentang deskriptor file 0, 1, dan 2.

Bagian tersulit dari ini adalah bagaimana untuk membuka file.out . Sebagian besar waktu, Anda ingin file.out dibuka untuk penulisan pada offset 0 (yaitu terpotong) dan inilah yang dilakukan Shell untuk Anda. Itu memotong .hgignore, membukanya untuk menulis, menduplikasi filedescriptor ke 0, lalu menjalankan head . Penghancuran file instan.

Di bash shell, Anda melakukan set noclobber untuk mengubah perilaku ini.


Linux
  1. Redirect Ke File Yang Sama Dengan File Sumber yang Diproses Oleh Perintah?

  2. 5 Contoh Praktis Perintah Kepala di Linux

  3. unix - kepala DAN ekor file

  1. Temukan file dan direktori di Linux dengan perintah find

  2. Salin dan tempel di baris perintah Linux dengan xclip

  3. Simpan keluaran tanggal dan perintah tonton ke file

  1. Bekerja dengan Input Output dan Error Redirection di Linux

  2. Pipes dan Redirection di Linux - Dijelaskan!

  3. contoh Perintah kepala di Linux