Yanıtlar:
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
Esasen, istediğiniz herhangi bir metni dosyaya dökebilirsiniz. CTRL-D, girişi sonlandıran ve sizi kabuğa geri döndüren bir dosya sonu sinyali gönderir.
sudo !!
- bu, son komutu sudo
başa eklenmiş olarak çalıştırıyor . Geçenlerde bunun nano
etc ile de çalıştığını öğrendim (yanlışlıkla nano nano auth
...)
!!
önce kullanmadım , harika. Sık sık böyle şeyler yapıyorum cat /var/log/apache/error.log
ve izin verilmiyor. Bu aynı zamanda geçmişten bir id ile de yapılabilir, örneğin sudo !1419
bu, komutu 1419
sudo olarak geçmişte satırda çalıştıracaktır .
Peki ya:
echo "hello" >> <filename>
Kullanılması >>
kullanırken, dosyanın sonuna veri ekler operatörü >
mevcut ise dosyanın içeriğini üzerine yazacaktır.
printf
Aynı şekilde de kullanabilirsiniz :
printf "hello" >> <filename>
Yukarıdakileri kullanmanın tehlikeli olabileceğini unutmayın. Örneğin, halihazırda bir dosyanız varsa ve dosyanın sonuna veri eklemeniz gerekiyorsa ve dosyadaki son >
tüm verileri eklemeyi unutursanız , dosyadaki tüm veriler yok edilir. Bu davranışı, noclobber
değişkeni aşağıdaki şekilde ayarlayarak değiştirebilirsiniz .bashrc
:
set -o noclobber
Şimdi yapmaya çalıştığınızda echo "hello" > file.txt
bir uyarı mesajı alacaksınız cannot overwrite existing file
.
Dosyaya yazmaya zorlamak için şimdi özel sözdizimini kullanmanız gerekir:
echo "hello" >| <filename>
Ayrıca, varsayılan echo
olarak, -n
bayrak kullanılarak bastırılabilecek bir sondaki yeni satır karakteri eklediğini de bilmelisiniz :
echo -n "hello" >> <filename>
Referanslar
cat
, ancak >>
bunun yerine kullanmaya dikkat etsen iyi olur >
!
sudo rm -r /
=)
sudo rm -r /
daha sudo rm -rf /
! ^ _ ^ İle mevcut bir dosyanın içeriğinin üzerine yazmadan önce onay isteyecek bir işaret var mı >
? Bunu her zaman böyle bir bayrağı kullanmak için takma ad, iyi bir fikir gibi görünüyor.
set -o noclobber
senin içinde .bashrc
özel bir sözdizimi kullanmadan sonra varolan bir dosyanın üzerine edemezecho "hello" >| <filename>
Diğer olası yol şudur:
echo "text" | tee -a filename >/dev/null
-a
Dosyanın sonuna ekler.
Gerekirse sudo
kullanın:
echo "text" | sudo tee -a filename >/dev/null
>/dev/null
Uç önler "metin" adresinden konsolda gösterilebilir.
Kabul edilen cevaba kadar takip edin.
Bunu bir komut dosyasında kullanıyorsanız sonu belirlemek için CTRL-D dışında bir şeye ihtiyacınız vardır . Bunun yerine şunu deneyin:
cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF
Bu, belirtilen dosyaya metin ekleyecektir ("EOF" dahil değil).
Bu bir kullanır burada belgeyi (veya bir yorumlu metin) .
Bununla birlikte, belirtilen dosyaya eklemek için sudo'ya ihtiyacınız varsa, doğrudan komut satırına yazıyorsanız, G / Ç yeniden yönlendirmesi nedeniyle bir yorum yazarken sorun yaşarsınız.
Bu varyasyon, doğrudan komut satırına yazarken çalışacaktır:
sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'
Veya tee
bunun yerine, heredocu cat ile kullanırken görülen komut satırı sudo sorununu önlemek için kullanabilirsiniz :
tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
cat << 'EOF' >
ve cat << 'EOF' >>
eklemeyi bilmiyordum ! Teşekkürler