สร้างเขียนและบันทึกไฟล์จากเชลล์สคริปต์


10

ฉันไม่ต้องการเขียนไฟล์ด้วยตนเองดังนั้นฉันจึงสร้างเชลล์สคริปต์ มีวิธีเขียนและบันทึกไฟล์โดยอัตโนมัติโดยไม่ให้ผู้ใช้กดปุ่มหรือไม่?

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

^ นี่จะอยู่ในไฟล์ * .sh

หรือมีวิธีอื่นในการสร้างไฟล์ข้อความอย่างง่ายในสคริปต์หรือไม่?


1
ฉันสงสัยว่าคุณกำลังถามคำถามผิดที่นี่ มีวิธีที่ง่ายกว่ามากในการเขียนไฟล์ในแบบเป็นโปรแกรมมากกว่าการพยายามควบคุมเอดิเตอร์เช่น nano บอกให้เราทราบว่าคุณต้องการทำอะไรกับไฟล์แทน
Warren Hill

ฉันแค่ต้องการสร้างมันและเขียนเส้นจำนวนหนึ่ง
Zarkopafilis

คุณกำลังขอวิธีแก้ปัญหาเช่นAutoitสำหรับ Windows ที่สามารถทำให้โปรแกรม GUI อัตโนมัติท่ามกลางสิ่งอื่น ๆ หรือทำอย่างไรถึงจะสามารถเขียนข้อความในรูปแบบเชลล์สคริปต์ได้$echo "Some text" > afile.txt?
Stef K

@Zarkopafilis - ฉันได้แก้ไขคำถามของคุณเพื่อให้ชัดเจนว่าคุณหมายถึงอะไร หากฉันเข้าใจผิดคุณสามารถย้อนกลับได้เสมอ ฉันยังโพสต์คำตอบสำหรับคุณ
Warren Hill

คำตอบ:


14

สำหรับลำดับที่ซับซ้อนมากขึ้นของคำสั่งที่คุณควรพิจารณาใช้catคำสั่งกับเอกสารที่นี่ รูปแบบพื้นฐานคือ

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

มีพฤติกรรมที่แตกต่างกันสองประการโดยขึ้นอยู่กับว่าจะมีการอ้างอิงป้ายกำกับ END_TEXT หรือไม่

  1. ป้ายกำกับที่ไม่มีเครื่องหมาย : เนื้อหาจะถูกเขียนหลังจากการขยายเชลล์ตามปกติ

  2. ฉลากที่ยกมา : เนื้อหาของเอกสารที่นี่ได้รับการปฏิบัติอย่างแท้จริงโดยไม่มีการขยายเปลือกปกติ

ตัวอย่างเช่นพิจารณาสคริปต์ต่อไปนี้

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

ผลที่ได้คือ

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

และ

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

หากคุณกำลังส่งคำสั่งเชลล์จากสคริปต์ของคุณคุณอาจต้องการแบบฟอร์มที่ยกมา


มนุษย์ใช้เวลานานเท่าไหร่ในการค้นหา ^^ คำถามหนึ่ง: มันใช้งานได้เฉพาะในสคริปต์หรือเป็นไปได้ที่จะใช้มันโดยตรงในเปลือก?
derHugo

@derHugo คุณสามารถใช้มันโดยตรงในเชลล์ - ในกรณีนั้นมันจะเป็นเรื่องปกติมากขึ้นที่จะละเว้นEND_TEXTและเพียงแค่ใช้CTRL-Dเพื่อส่งสัญญาณจุดสิ้นสุดของอินพุต ดูตัวอย่างวิธีส่งสัญญาณการสิ้นสุดของอินพุต stdin
steeldriver

7

ไม่จำเป็นต้องยุ่งเกี่ยวกับการแก้ไขเมื่อต้องการทำเช่นนี้

คุณสามารถต่อท้ายไฟล์ด้วยคำสั่ง echo อย่างง่าย ตัวอย่างเช่น

echo "Hello World" >> txt

จะผนวก "สวัสดีชาวโลก" txtเพื่อไฟล์ หากไฟล์ไม่มีอยู่ไฟล์นั้นจะถูกสร้างขึ้น

หรือถ้าไฟล์นั้นมีอยู่แล้วและคุณต้องการที่จะเขียนทับมัน

echo "Hello World" > txt

สำหรับบรรทัดแรก: และ

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

สำหรับบรรทัดต่อมา

ที่มันเป็นเรื่องที่ง่ายที่สุดใน.shสคริปต์ก็สามารถมีชุดของคำสั่งเสียงสะท้อน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.