Dimohon perhatiannya:
Saya tidak bertanya bagaimana cara membuat file dari baris perintah!
Saya telah menggunakan touch
untuk membuat file selama bertahun-tahun tanpa memperhatikan bahwa tujuan utamanya adalah sesuatu yang lain. Jika seseorang ingin membuat file dari baris perintah ada begitu banyak kemungkinan:
touch foo.bar
> foo.bar
cat > foo.bar
echo -n > foo.bar
printf '' > foo.bar
Dan saya yakin masih ada lagi.
Tetapi faktanya, tidak ada perintah di atas yang benar-benar dirancang untuk membuat file. Misalnya, man touch
menyarankan perintah ini untuk mengubah stempel waktu file. Mengapa OS tidak selengkap Unix (atau Linux) hanya memiliki perintah yang dirancang untuk membuat file?
bash
shell
command-line
files
Pouya
sumber
sumber
cat
konvensi!more
kapanless
lebih dari apa yangmore
dilakukan !? Ataudir
danls
. Meskipun demikian, saya mengetahui masalah kompatibilitas.more
sebelum penciptaanless
.less
telah dibuat khusus untuk mengatasi kekuranganmore
.more
masih ada karena alasan kompatibilitas ke belakang.dir
danls
, untuk sebagian besar maksud dan tujuan, dapat dieksekusi sama - mereka hanya berbeda dalam beberapa byte. Sebuah alat baru yang ditujukan khusus untuk membuat file akan melakukan kurang dari alat yang ada, dan karena itu akan menjadi regresi, bukan perbaikan seperti dalam kasusless
vsmore
.Jawaban:
Saya akan mengatakan karena hampir tidak pernah diperlukan untuk membuat file kosong yang Anda tidak akan segera isi dengan pada baris perintah atau dalam skrip shell.
Sama sekali tidak ada manfaat dalam membuat file pertama dan kemudian menggunakan pengalihan I / O untuk menulis ke file jika Anda dapat melakukannya dalam satu langkah.
Dalam kasus-kasus di mana Anda benar-benar ingin membuat file kosong dan meninggalkannya, saya berpendapat itu
> "${file}"
tidak bisa lebih singkat dan lebih elegan.TL; DR : Itu tidak ada karena membuat file kosong paling sering tidak digunakan, dan dalam kasus itu sudah ada segudang pilihan yang tersedia untuk mencapai tujuan ini.
Di samping catatan, menggunakan
touch
hanya berfungsi jika file tidak ada sedangkan opsi menggunakan pengalihan akan selalu memotong file, bahkan jika ada (jadi secara teknis, solusi tersebut tidak identik).> foo
adalah metode yang disukai karena menyimpan afork
danecho -n
harus dihindari secara umum karena sangat tidak dapat diport.sumber
>>
). Saya merujuk pada contoh yang diberikan oleh OP menggunakan>
. Menambahkan akan sangat tidak berguna jika apa yang Anda cari adalah membuat file (atau NOOP keluar jika ada).noclobber
belum diatur sehingga>
akan menimpa file yang sudah ada.alias rm='rm -i'
alih - alihalias rmi='rm -i'
adalah ide yang buruk.> .file
pada baris perintah saja, akan melakukannya dengan sangat baik tanpa:
.Jawaban Adrian Frühwirth tepat. Saya hanya ingin menambahkan bahwa sebenarnya ada perintah khusus ditulis untuk membuat file:
mktemp
.Memang,
mktemp
tugasnya bukan untuk membuat file dengan nama tertentu, itu hanya untuk membuat file . Namun, seperti yang telah Anda ketahui, ada begitu banyak cara yang lebih efisien dan elegan untuk membuat file dengan nama tertentu yang memberikan perintah untuk itu tidak ada gunanya.Yang mengatakan, Anda juga memiliki
truncate
danfallocate
keduanya yang tujuan utamanya adalah untuk membuat file. Mereka hanya memiliki pendekatan yang lebih canggih. Tidak akan pernah ada program sederhana yang melakukan apa yang> file
dilakukan karena tidak ada cara yang lebih baik dari itu> file
.sumber
Sebagian besar alat shell dasar tidak dirancang untuk tujuan yang sangat spesifik sama sekali. Sebagian besar alat shell dasar dirancang hanya untuk berinteraksi dengan orang lain untuk mencapai tujuan Anda. Atau mungkin bisa dikatakan bahwa sebagian besar alat hanya melakukan satu hal yang sangat mendasar terlepas dari bagaimana mereka digabungkan untuk mencapai tujuan.
Itu menciptakan file kosong. Atau memotong file yang ada seperti yang Anda mau. Kamu bisa:
untuk menghindari kemungkinan kasus terakhir kecuali Anda:
Anda bisa mendapatkan perilaku serupa
touch
dengan:Kecuali itu
:
tidak akan memperbarui modtime file karena tidak dimodifikasi.DEMO
KELUARAN
TIDAK SENTUH
KELUARAN
sumber
\n
di akhir baris. Cobaecho -n >echo-n.file
(ukuran = 0) danecho -e >echo-e.file
(ukuran = 1)cat
. Mengapa memiliki perintah untuk menampilkan satu file, ketika Anda dapat membuat satu perintah untuk menggabungkan beberapa file ke output standar?Utilitas
install
sebenarnya dirancang untuk membuat file! Anda dapat mengirimkan konten file melalui/dev/stdin
(dalam kebanyakan kasus, bagaimanapun, pada sebagian besar rasa Linux, ini mengharuskan yang/proc
dipasang) atau menyediakan file sumber lain. Anda dapat mengatur kepemilikan dan izin.sebagai contoh konyol.
sumber