Jawaban:
Sedikit pemahaman tentang cara kerja pipa * nix akan membantu.
Singkatnya >>
operator pengalihan akan menambahkan baris ke akhir file yang ditentukan, di mana-sebagai tunggal lebih besar dari >
akan mengosongkan dan menimpa file.
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
-bash: TheAccount.txt: cannot overwrite existing file
.
>
dan >>
merupakan operator pengalihan output . Operator pipa adalah |
.
>|
untuk memaksa menimpa yang sudah ada
Di Bash, jika Anda telah menetapkan noclobber a la set -o noclobber
, maka Anda menggunakan sintaks>|
Sebagai contoh:
echo "some text" >| existing_file
Ini juga berfungsi jika file belum ada
Periksa apakah noclobber diatur dengan: set -o | grep noclobber
Untuk penjelasan lebih rinci tentang jenis operator khusus ini, lihat posting ini
Untuk daftar operator pengalihan yang lebih lengkap, lihat pos ini
&>| file
bekerja. Shell dan versi apa yang Anda gunakan? @stimulasi untuk zsh keduanya harus bekerja , untuk bash itu hanya>|
echo "aaa" &>| test.txt
mengakibatkan kesalahan -bash: syntax error near unexpected token |
. Noclobber saya disetel ke Hidup.
echo "aaa" >| test.txt 2>&1
menggunakan atau menggunakan shell lain.
Meskipun NylonSmile
jawaban , yang "semacam" benar .. Saya tidak dapat menimpa file, dengan cara ini ..
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
untuk menyelesaikan masalah saya .. Saya harus menggunakan ... >!
, á la ..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
Jelas, berhati-hatilah dengan ini ...
NOCLOBBER
menetapkan opsi zsh non-default . Gunakan setopt clobber
untuk mengembalikan perilaku default.
Jika lingkungan Anda tidak mengizinkan penimpaan >
, gunakan pipa |
dan tee
ganti sebagai berikut:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
Catatan ini juga akan mencetak ke stdout. Dalam hal ini tidak diinginkan, Anda dapat mengarahkan output ke /dev/null
sebagai berikut:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null
#!/bin/bash
cat <<EOF > SampleFile
Put Some text here
Put some text here
Put some text here
EOF
Hanya mencatat bahwa jika Anda ingin mengarahkan kembali std :: cerr dan std :: cout ke file saat Anda memiliki set noclobber (yaitu set -o noclobber
), Anda dapat menggunakan kode:
cmd >|file.txt 2>&1
Informasi lebih lanjut tentang ini dapat dilihat di https://stackoverflow.com/a/876242 .
Juga pertanyaan @ TuBui jawaban ini pada jawaban @BrDaHa disediakan di atas pada 9 Agustus '18 pada 9:34.
Untuk menimpa konten satu file ke file lain. gunakan kucing misalnya.
echo "this is foo" > foobar.txt
cat foobar.txt
echo "this is bar" > bar.txt
cat bar.txt
Sekarang untuk menimpa foobar kita dapat menggunakan perintah cat seperti di bawah ini
cat bar.txt >> foobar.txt
cat foobar.txt
>>
itu menambahkan, bukan menimpa
Jika Anda memiliki output yang dapat memiliki kesalahan, Anda mungkin ingin menggunakan ampersand dan lebih besar dari, sebagai berikut:
my_task &> 'Users/Name/Desktop/task_output.log'
ini akan mengarahkan ulang stderr dan stdout ke file log (bukan hanya stdout).