Buat, Tulis, dan Simpan file dari skrip Shell

10

Saya tidak ingin menulis file secara manual, jadi saya membuat skrip shell. Apakah ada cara untuk menulis & menyimpan file secara otomatis tanpa membuat pengguna menekan tombol?

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

^ Ini akan berada di dalam file * .sh

Atau adakah cara lain untuk membuat file teks sederhana dalam sebuah skrip?

Zarkopafilis
sumber
1
Saya curiga Anda mengajukan pertanyaan yang salah di sini. Ada banyak cara yang lebih sederhana untuk menulis ke file dengan cara terprogram daripada mencoba mengendalikan editor seperti nano. Beri tahu kami apa yang ingin Anda lakukan dengan file itu.
Warren Hill
Saya hanya ingin membuatnya dan menulis banyak baris.
Zarkopafilis
Apakah Anda meminta solusi seperti Autoit untuk Windows yang dapat mengotomatisasi program GUI antara lain atau bagaimana dapat menulis teks dari skrip shell misalnya $echo "Some text" > afile.txt?
Stef K
@Zarkopafilis - Saya telah mengedit pertanyaan Anda untuk membuatnya lebih jelas apa yang Anda maksud. Jika saya salah paham, Anda selalu bisa mengembalikannya. Saya juga memposting jawaban untuk Anda.
Warren Hill

Jawaban:

14

Untuk urutan perintah yang lebih kompleks, Anda harus mempertimbangkan menggunakan catperintah dengan dokumen di sini . Format dasarnya adalah

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

Ada dua perilaku yang agak berbeda tergantung apakah label END_TEXT dikutip atau tidak dikutip:

  1. label yang tidak dikutip : isinya ditulis setelah ekspansi shell yang biasa

  2. label yang dikutip : isi dokumen di sini diperlakukan secara harfiah, tanpa ekspansi shell yang biasa

Misalnya perhatikan skrip berikut

#!/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

Hasilnya

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

dan

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

Jika Anda mengeluarkan perintah shell dari skrip Anda, Anda mungkin menginginkan formulir yang dikutip.

Steeldriver
sumber
Man berapa lama saya mencari ini ^^ satu pertanyaan: apakah ini hanya berfungsi dalam skrip atau apakah mungkin untuk menggunakannya secara langsung dalam shell?
derHugo
@ DerHugo Anda dapat menggunakannya langsung di shell - dalam hal ini, akan lebih biasa untuk menghilangkan END_TEXTdan hanya menggunakan CTRL-Duntuk memberi sinyal akhir input. Lihat misalnya Bagaimana memberi sinyal pada akhir input stdin
steeldriver
7

Tidak perlu dipusingkan dengan editor untuk melakukan ini.

Anda dapat menambahkan sesuatu ke file dengan perintah gema sederhana. Sebagai contoh

echo "Hello World" >> txt

Akan menambahkan "Halo dunia" ke file txt. jika file tidak ada maka akan dibuat.

Atau jika file tersebut mungkin sudah ada dan Anda ingin menimpanya

echo "Hello World" > txt

Untuk baris pertama: dan

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

Untuk baris selanjutnya.

Paling sederhana .shskrip hanya bisa berisi satu set perintah gema.

Warren Hill
sumber