Shell komut dosyası dosyaya yeni satır eko


26

Bir kabuk betiğindeki değişkenler arasındaki bir dosyaya yeni bir satır eko etmek istiyorum. İşte kodum:

var1 = "Merhaba"
var2 = "Dünya!"
logwrite = "$ var1 [Yeni bir satır eklemek istediğim yer] $ var2
echo "$ logwrite" >> / Kullanıcı / kullanıcı adı / Masaüstü / kullanıcı.txt

Şu anda komut dosyasını çalıştırdığımda, user.txt dosyası şunu gösteriyor:

Selam Dünya!

Göstermesini istiyorum:

Merhaba
Dünya!

Bunu nasıl yaparım??

EDIT: İşte benim kabuk komut dosyası:

echo -n "İlk adın nedir?"
önce oku
echo -n "Soyadınız nedir?"
son oku
echo -n "Göbek adın nedir?"
orta oku
echo -n "Doğum günün ne?"
doğum günü oku
echo -e "İlk Ad: $ ilk / nSon Adı: $ last / nOrta Adı: $ orta / nDoğum Günü: $ doğum günü" >> / Kullanıcı / matthewdavies/Desktop/user.txt
qlmanage -p "~ / Desktop / user.txt"

1
Bu "logwrite" değişkenini oluşturmanız GEREKİR Mİ? Eğer yazabilir printf "%s\n" $var1 $var2 >> file?
glenn jackman

Hayır, üzerinde çalıştığım revize edilmiş betiğime ihtiyacım yok, $ logwrite değişkenini kullanmıyorum. Teşekkürler.
daviesgeek

Yanıtlar:


32
var1="Hello"
var2="World!"
logwrite="$var1\n$var2"
echo -e "$logwrite"  >> /Users/username/Desktop/user.txt

Açıklama:

Çıkış \nsırası bir satır beslemesini gösterir. -eArgümanı ekoya geçirmek kaçış dizilerinin yorumlanmasını sağlar.

Hatta daha da basitleştirilebilir:

var1="Hello"
var2="World!"
echo -e "$var1\n$var2"  >> /Users/username/Desktop/user.txt

ya da:

echo -e "Hello\nWorld! "  >> /Users/username/Desktop/user.txt

Örneğiniz çalışıyor, ancak koduma dahil ettiğimde işe yaramıyor. Gönderimi düzenleyeceğim ve komut dosyasını ekleyeceğim.
daviesgeek

1
@ dave kaçış dizisi ile yanlış eğik çizgi kullanıyorsunuz görünmektedir. hile yapmak \nyerine /n:)
John T,

Bu giderir (/ n yerine \ n kullanarak. Çok teşekkürler !!
daviesgeek

@dave daha fazlasını bekliyoruz :)
John T

KSH komut dosyasında AIX üzerinde -ebayrak istemedim .
javaPlease42

5
var1='Hello'
var2='World!'
echo "$var1" >> /Users/username/Desktop/user.txt
echo "$var2" >> /Users/username/Desktop/user.txt

ya da aslında varyasyonlara ihtiyacınız yok:

echo 'Hello' >> /Users/username/Desktop/user.txt
echo 'World!' >> /Users/username/Desktop/user.txt

john t answer ile ilgili bir sorun var: varslardan herhangi biri \ n dizesine sahipse (veya \ t gibi başka bir dizilim varsa) çevrilecektir. printf ile olan cevabına benzer bir şey olabilir:

printf '%s\n%s\n' 'Hello' 'World!'

ayrıca hmm. Cevabı $ logwrite değişkeninde oluşturduğunuzu görüyorum. Bu, bu değişkenin tek kullanımı ise, anlamsız görünüyor.

Bence burada bir doc-doktor daha okunaklı olabilir, özellikle kayıtlara eklemek için çok fazla satırınız varsa:

cat >> /Users/username/Desktop/user.txt <<EOF
Hello
World
EOF

(Bu kelime, EOF, seçebileceğiniz bir sınırlayıcıdır. Herhangi bir kelime olabilir).

Heredoc'un çift tırnak işaretleri gibi $ değişkenlerini genişleteceğini unutmayın. Eğer bunu istemiyorsanız, << "EOF"


Sorun var var hiçbiri \n, bu yüzden neden cevap verdim. "Eğer" metodolojisi bu sitedeki her soruyu bitmeyen bir tartışmaya taşıyacaktır. O yola geldiğinde başka bir soru sorabilir :)
John T

@elias $ logwrite değişkeni, değişiklikler yaparken betiğimdeki düzenlemelerimden artık kaldı. $ Logwrite var kodumun dışına aldı. John T.'nin cevabı gerçekten işe yaradı. Çok teşekkürler!
daviesgeek

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.