Saya baru mengenal Linux. Ketika saya membuat file .gitignore baru di bawah direktori saat ini menggunakan bash, saya menemukan bahwa saya dapat melakukannya:
> .gitignore
atau
touch .gitignore
Sepertinya mereka melakukan hal yang sama. Ketika saya memeriksa manual untuk touch
, ia mengatakan mengubah stempel waktu untuk file saat ini, tetapi tidak ada manual untuk >
. Jadi bisakah seseorang menjelaskan apa yang dapat >
dilakukan dan apakah ada perbedaan dalam menggunakan kedua perintah ini dalam konteks ini? Terima kasih.
command-line
Steve Deng Zishi
sumber
sumber
man bash
. Ini dokumen yang panjang dan akan memakan waktu berhari-hari atau bahkan berminggu-minggu untuk dipahami dengan baik, tetapi perlu dilakukan jika Anda ingin mempelajari Bash secara menyeluruh.Jawaban:
>
adalah operator pengalihan shell. Lihat Apa perbedaan antara ">" dan ">>" dalam perintah shell? dan kapan saya harus menggunakan <atau <() atau << dan> atau> ()? Ini terutama digunakan untuk mengarahkan output dari perintah ke file. Jika file tidak ada, shell akan membuatnya. Jika ada, shell memotongnya (mengosongkannya). Dengan hanya> file
, tidak ada perintah, jadi shell membuat file, tetapi tidak ada output yang dikirim ke sana, jadi efek bersihnya adalah pembuatan file kosong, atau mengosongkan file yang sudah ada.touch
adalah perintah eksternal yang membuat file, atau memperbarui cap waktu, seperti yang sudah Anda ketahui. Dengantouch
, isi file tidak hilang, jika ada, tidak seperti dengan>
.Perilaku
>
tergantung pada shell. Di bash, dash, dan sebagian besar shell,> foo
akan berfungsi seperti yang Anda harapkan. Di zsh, secara default,> foo
berfungsi seperticat > foo
- zsh menunggu Anda mengetik input.sumber
>> file
dantouch file
tetapi jikafile
tidak ada, ada perbedaan besar antara keduanya dan> file
(dalam arti bahwa konten sebelumnyafile
hilang). Itu, ditambah perilaku tidak konsisten dari zsh berartitouch file
adalah "paling aman" dan karenanya harus dihafal sebagai Cara yang Tepat Untuk Melakukannya.Berikut ini perbandingan yang menarik:
Hasil:
sumber
strace
seharusnya menunjukkan pemanggilan sistem yang sedang dieksekusi, dan> file.txt
metode ditampilkan sebagai jumlah pemanggilan sistem yang dieksekusi paling sedikit, yang sebenarnya tidak terlalu mengejutkan - semakin kompleks sebuah alat, semakin kompleks syscall-nya. Masalah dengan contoh-contoh yang ditunjukkan, bagaimanapun adalah bahwastrace
menulisstderr
mengalir secara default, dan dalam jawaban ini Steven menggunakan pipa untuk membaca sajastderr
, jadi saya sedikit bingung bagaimana dia menghitung garis menggunakan|
pipa dan tidak|&
|&
, seperti @Serg menyebutkan, saya mendapatkan hitungan sekitar seperlima dari yang di sini ... kecuali untukvi
kasus ini, di mana saya mendapatkan nilai yang sama