Baru-baru ini saya menggemakan kalimat pendek ke tree_hole
file.
Saya menggunakan echo 'something' >> tree_hole
untuk melakukan pekerjaan ini.
Tetapi saya selalu khawatir bagaimana jika saya salah memasukkan >
bukan >>
, karena saya sering melakukan ini.
Jadi saya membuat fungsi bash global saya sendiri di bashrc:
function th { echo "$1" >> /Users/zen1/zen/pythonstudy/tree_hole; }
export -f th
Tapi saya bertanya-tanya apakah ada cara sederhana lain untuk menambahkan baris ke akhir file. Karena saya mungkin perlu sering menggunakannya dalam kesempatan lain.
Apakah ada?
rm="rm -i"
dan di lingkungan lain menulisrm *
menunggu pertanyaan konfirmasi. Anda belajar kebiasaan berbahaya!Jawaban:
Atur opsi shell
noclobber
:sumber
>|
.zsh
mengaktifkan perilaku ini secara default.setopt noclobber
dansetopt clobber
. Tampaknya itu bukan "default", itu tergantung pada file konfigurasi yang dikirimkan bersama distro Anda.set [+-]C
shell modernset +o noclobber
dalam bash, atauset +C
.Jika Anda khawatir file Anda akan rusak oleh
>
operator, Anda dapat mengubah atribut file Anda menjadi hanya menambahkan:Dalam sistem file ext2 / ext3 / ext4 :
chattr +a file.txt
Dalam sistem file XFS :
echo chattr +a | xfs_io file.txt
Dan jika Anda menginginkan suatu fungsi, saya telah membuat suatu fungsi untuk diri saya sendiri (saya menggunakannya dalam file layanan untuk mencatat keluaran), Anda dapat mengubahnya untuk tujuan Anda:
sumber
$
) untuk mencegah globbing, pemecahan kata dan masalah spasi spasi terkait Aplikasi ShellCheck online dapat menangkap ini dan berbagai masalah lainnya di skrip bash. Pada catatan terkait"$@"
adalah jauh lebih aman daripada$*
.read
perintah dengan-r
opsi untuk mencegah backslash dalam input lolos dari karakter berikut. 3) Biasanya dalam skrip bash untuk menggunakan huruf kecil untuk nama-nama variabel skrip karena SEMUA KASUS UPPER digunakan untuk variabel sistem. Jadi, jika Anda menggunakan huruf besar untuk variabel Anda sendiri, Anda akan membingungkan orang yang membaca kode Anda, dan Anda mungkin secara tidak sengaja memecahkan variabel sistem yang ingin Anda gunakan nanti dalam skrip. Dan jika Anda sumber skrip, itu akan menghancurkan variabel untuk perintah selanjutnya.echo
berguna untuk mencetak string tetap, tetapi dapat melakukan hal-hal yang tidak terduga dengan data arbitrer, terutama pada sistem GNU. Ini jauh lebih aman untuk digunakanprintf
. Lihat unix.stackexchange.com/questions/65803/… untuk info lebih lanjut, terutama jawaban Stéphane Chazelas.Gunakan
tee
dengan opsi append:sumber
>
karakter, mereka mungkin khawatir akan melupakan-a
opsi!banyak program yang dapat membuka file untuk ditimpa dapat juga membukanya untuk ditambahkan, misalnya gnu dd.
itu bisa membaca stdin atau file bernama dalam
if=
parameter add2>/dev/null
untuk menekan jumlah byte.sumber
dd
adalah ide yang buruk.dd
tidak andal menulis inputnya ke outputnya , tidak ketika salah satu dari mereka bukan file atau blok perangkat biasaSaya ingin menggunakan
sed
(bahkan dengan salinan cadangan - lihat ekstensi setelah-i
):sumber
Anda selalu dapat mencari melalui file dengan cara lain ...
... urutan yang tampak aneh itu dicetak:
Tapi itu agak konyol.
Contoh yang lebih bermanfaat bisa terlihat seperti:
Anda bisa menyebutnya seperti:
Dan Anda akan berakhir dengan jumlah
file
baris yang ditulisstderr
sebelum tindakan menambahkan terjadi.sumber