Yanıtlar:
* Nix borularının nasıl çalıştığının biraz anlaşılması yardımcı olacaktır.
Kısacası, >>
yeniden yönlendirme operatörü belirtilen dosyanın sonuna satır ekleyecektir; burada tek büyük >
dosya dosyayı boşaltacak ve üzerine yazacaktır.
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
-bash: TheAccount.txt: cannot overwrite existing file
.
>
ve >>
vardır çıkış yönlendirme operatörler. Boru operatörü |
.
>|
Mevcut üzerine yazmaya zorlamak için kullanın
Bash'te, noclobber a la ayarladıysanız set -o noclobber
, sözdizimini kullanırsınız>|
Örneğin:
echo "some text" >| existing_file
Bu, dosya henüz mevcut değilse de çalışır
Noclobber öğesinin ayarlanıp ayarlanmadığını kontrol edin: set -o | grep noclobber
Operatörün bu özel tip bir daha ayrıntılı bir açıklama için bkz Bu yayını
Yönlendirme işleçlerinin daha kapsamlı bir listesi için bu gönderiye bakın
&>| file
çalışır. Hangi kabuğu ve sürümü kullanıyorsunuz? @ zsh için uyarın her ikisi de çalışmalı , bash için sadece>|
echo "aaa" &>| test.txt
hata ile sonuçlanır -bash: syntax error near unexpected token |
. Noclobber'ım Açık.
echo "aaa" >| test.txt 2>&1
başka bir mermiye bağlı kalmak veya kullanmak zorundasınız .
"Bu tür" doğru olan NylonSmile
cevaba rağmen , dosyaların üzerine yazamadım, bu şekilde ..
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
sorunlarımı çözmek için .. Kullanmak zorundaydım ... >!
, la ..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
Açıkçası, buna dikkat et ...
NOCLOBBER
ayarlandığı anlamına gelir . setopt clobber
Varsayılan davranışı geri yüklemek için kullanın .
Ortamınızın ile üzerine yazmasını izin vermiyorsa >
kullanım borusu, |
ve tee
bunun yerine aşağıdaki gibi:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
Bunun stdout'a da yazdırılacağını unutmayın. Bu istenmeyen durumlarda, çıktıyı /dev/null
aşağıdaki gibi yönlendirebilirsiniz :
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
Noclobber ayarınız (yani set -o noclobber
) varken hem std :: cerr hem de std :: cout'u bir dosyaya yeniden yönlendirmek istiyorsanız, kodu kullanabilirsiniz:
cmd >|file.txt 2>&1
Bununla ilgili daha fazla bilgi https://stackoverflow.com/a/876242 adresinde görülebilir .
Ayrıca bu cevabın @ TuBui'nin yukarıdaki 9BDaHa cevabı hakkındaki sorusu, 9 Ağustos 18, 9: 34'te sağlanmıştır .
Bir dosyanın içeriğini başka bir dosyaya yazmak için. kedi kullanın örn.
echo "this is foo" > foobar.txt
cat foobar.txt
echo "this is bar" > bar.txt
cat bar.txt
Şimdi foobarın üzerine yazmak için aşağıdaki gibi bir cat komutu kullanabiliriz
cat bar.txt >> foobar.txt
cat foobar.txt
>>
Hatalar içerebilecek bir çıktıya sahipseniz, aşağıdaki gibi bir ve işareti veya daha büyük bir değer kullanmak isteyebilirsiniz :
my_task &> 'Users/Name/Desktop/task_output.log'
bu hem stderr hem de stdout'u günlük dosyasına yönlendirir (yalnızca stdout yerine).