Shell betiğinden dosya oluşturma, yazma ve kaydetme


10

Dosyayı manuel olarak yazmak istemiyorum, bu yüzden bir kabuk-script yaptım. Kullanıcının tuşlara basmasına gerek kalmadan dosyayı otomatik olarak yazmanın ve kaydetmenin bir yolu var mı?

sudo nano blah
#write stuff to file
#save file
#continue

^ Bu bir * .sh dosyası içinde olacaktır

Veya bir komut dosyasında basit bir metin dosyası oluşturmanın başka bir yolu var mı?


1
Burada yanlış soru sorduğunuzdan şüpheleniyorum. Bir dosyaya nano gibi bir düzenleyiciyi kontrol etmeye çalışmaktan programlı bir şekilde yazmanın çok daha kolay yolları vardır. Bunun yerine dosyayla ne yapmak istediğinizi bize bildirin.
Warren Hill

Sadece oluşturmak ve bir sürü satır yazmak istiyorum.
Zarkopafilis

Diğer şeylerin yanı sıra GUI programlarını otomatikleştirebilen Windows için Autoit gibi bir şey $echo "Some text" > afile.txtmi arıyorsunuz , örneğin bir kabuk betiğinden nasıl metin yazabileceğinizi ?
Stef K

@Zarkopafilis - Ne demek istediğini daha açık hale getirmek için sorunuzu düzenledim. Eğer seni yanlış anladıysam her zaman geri alabilirsin. Ben de sana bir cevap gönderdim.
Warren Hill

Yanıtlar:


14

Daha karmaşık komut dizileri için, catkomutu burada bulunan bir belgeyle kullanmayı düşünmelisiniz . Temel biçim

command > file << END_TEXT
some text here
more text here
END_TEXT

END_TEXT etiketinin alıntılanıp alıntılanmamasına bağlı olarak iki farklı davranış vardır:

  1. alıntılanmamış etiket : içindekiler normal kabuk genişletmelerinden sonra yazılır

  2. alıntı etiket : bu belgenin içeriği, olağan kabuk genişletmeleri olmadan tam anlamıyla işlenir

Örneğin, aşağıdaki komut dosyasını ele alalım

#!/bin/bash

var1="VALUE 1"
var2="VALUE 2"

cat > file1 << EOF1
do some commands on "$var1" 
and/or "$var2"
EOF1

cat > file2 << "EOF2"
do some commands on "$var1" 
and/or "$var2"
EOF2

Sonuçlar

$ cat file1
do some commands on "VALUE 1" 
and/or "VALUE 2"

ve

$ cat file2
do some commands on "$var1" 
and/or "$var2"

Komut dosyanızdan kabuk komutları çıkarıyorsanız, büyük olasılıkla alıntılanan formu istersiniz.


Adam ne kadar zamandır bu ^^ bir soru aradım: Bu sadece senaryoda çalışıyor mu yoksa doğrudan kabukta kullanmak mümkün mü?
derHugo

@derHugo doğrudan kabukta kullanabilirsiniz - bu durumda, girişin sonunu atlamak END_TEXTve kullanmak CTRL-Diçin daha olağan olur . Örneğin bkz . Stdin girişinin sonu nasıl bildirilir
steeldriver

7

Bunu yapmak için bir editörle uğraşmanıza gerek yok.

Basit bir echo komutuyla dosyaya bir şeyler ekleyebilirsiniz. Örneğin

echo "Hello World" >> txt

Dosyaya "Merhaba dünya" ekleyecek txt. dosya yoksa oluşturulacaktır.

Veya dosya zaten mevcutsa ve üzerine yazmak istiyorsanız

echo "Hello World" > txt

İlk satır için: ve

echo "I'm feeling good" >> txt
echo "how are you" >> txt 

Sonraki satırlar için.

En basit haliyle, .shkomut dosyası sadece bir dizi yankı komutu içerebilir.

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.