yah..ini mengagumkan. Saya mengakui> sedikit lebih awal dari >>.
Jokester
Jawaban:
411
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.
@BrDaHa Bagaimana saya bisa mengarahkan ulang stderr dengan> | demikian juga? Saya mencoba &> | tapi itu tidak berhasil.
Tu Bui
@ TuBui tidak yakin mengapa itu tidak berhasil untuk Anda. Di mesin saya &>| filebekerja. Shell dan versi apa yang Anda gunakan? @stimulasi untuk zsh keduanya harus bekerja , untuk bash itu hanya>|
Griddo
@Griddo shell saya adalah bash versi 4.3.48 (1) -release. echo "aaa" &>| test.txtmengakibatkan kesalahan -bash: syntax error near unexpected token |. Noclobber saya disetel ke Hidup.
Tu Bui
1
@ TuBui Tampaknya saya tidak menguji dengan benar. Ini juga tidak berfungsi untuk saya ... namun dokumentasinya tidak menyatakan bahwa itu harus dimungkinkan. Anda mungkin harus tetap echo "aaa" >| test.txt 2>&1menggunakan atau menggunakan shell lain.
Griddo
40
Meskipun NylonSmilejawaban , 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 ..
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:
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.sumber
-bash: TheAccount.txt: cannot overwrite existing file
.>
dan>>
merupakan operator pengalihan output . Operator pipa adalah|
.>|
untuk memaksa menimpa yang sudah adaDi 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
sumber
&>| 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
untuk menyelesaikan masalah saya .. Saya harus menggunakan ...
>!
, á la ..Jelas, berhati-hatilah dengan ini ...
sumber
NOCLOBBER
menetapkan opsi zsh non-default . Gunakansetopt clobber
untuk mengembalikan perilaku default.Jika lingkungan Anda tidak mengizinkan penimpaan
>
, gunakan pipa|
dantee
ganti sebagai berikut:Catatan ini juga akan mencetak ke stdout. Dalam hal ini tidak diinginkan, Anda dapat mengarahkan output ke
/dev/null
sebagai berikut:sumber
sumber
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: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.
sumber
Untuk menimpa konten satu file ke file lain. gunakan kucing misalnya.
Sekarang untuk menimpa foobar kita dapat menggunakan perintah cat seperti di bawah ini
sumber
>>
itu menambahkan, bukan menimpaJika 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).sumber