Tạo, ghi và lưu tệp từ tập lệnh Shell


10

Tôi không muốn viết tệp theo cách thủ công, vì vậy tôi đã tạo một shell-script. Có cách nào để viết và lưu tệp tự động mà không cần người dùng nhấn phím không?

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

^ Điều này sẽ nằm trong tệp * .sh

Hoặc có một cách khác để tạo một tệp văn bản đơn giản trong một tập lệnh?


1
Tôi nghi ngờ bạn đang đặt câu hỏi sai ở đây. Có nhiều cách đơn giản hơn để ghi vào tệp theo cách lập trình hơn là cố gắng kiểm soát trình soạn thảo như nano. Hãy cho chúng tôi những gì bạn muốn làm với các tập tin thay thế.
Warren Hill

Tôi chỉ muốn tạo ra nó và viết một loạt các dòng.
Zarkopafilis

Bạn đang yêu cầu một giải pháp nào đó như Autoit cho Windows có thể tự động hóa các chương trình GUI trong số những thứ khác hoặc làm thế nào để có thể viết văn bản dưới dạng tập lệnh shell chẳng hạn $echo "Some text" > afile.txt?
Stef K

@Zarkopafilis - Tôi đã chỉnh sửa câu hỏi của bạn để làm cho nó rõ hơn ý của bạn. Nếu tôi hiểu lầm bạn, bạn luôn có thể quay lại. Tôi cũng đã đăng một câu trả lời cho bạn.
Warren Hill

Câu trả lời:


14

Đối với các chuỗi lệnh phức tạp hơn, bạn nên xem xét sử dụng catlệnh với tài liệu ở đây . Định dạng cơ bản là

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

Có hai hành vi khác nhau tùy thuộc vào việc nhãn END_TEXT được trích dẫn hay không trích dẫn:

  1. nhãn không trích dẫn : nội dung được viết sau khi mở rộng vỏ thông thường

  2. nhãn được trích dẫn : nội dung của tài liệu ở đây được xử lý theo nghĩa đen, không có sự mở rộng vỏ thông thường

Ví dụ, hãy xem xét đoạn script sau

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

Kết quả là

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

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

Nếu bạn xuất các lệnh shell từ tập lệnh của mình, bạn có thể muốn biểu mẫu được trích dẫn.


Man bao lâu tôi đã tìm kiếm cái này ^^ một câu hỏi: cái này chỉ hoạt động trong kịch bản hay có thể sử dụng nó trực tiếp trong shell không?
derHugo

@derHugo bạn có thể sử dụng nó trực tiếp trong shell - trong trường hợp đó, việc bỏ qua END_TEXTvà chỉ đơn giản là sử dụng CTRL-Dđể báo hiệu kết thúc đầu vào. Xem ví dụ Cách báo hiệu kết thúc đầu vào stdin
Steeldo

7

Không cần phải lộn xộn với một biên tập viên để làm điều này.

Bạn có thể nối một cái gì đó vào một tập tin bằng lệnh echo đơn giản. Ví dụ

echo "Hello World" >> txt

Sẽ nối "Hello world" vào tập tin txt. nếu tập tin không tồn tại, nó sẽ được tạo.

Hoặc nếu tệp có thể đã tồn tại và bạn muốn ghi đè lên nó

echo "Hello World" > txt

Đối với dòng đầu tiên: và

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

Đối với các dòng tiếp theo.

Đơn giản nhất, .shtập lệnh chỉ có thể chứa một tập hợp các lệnh echo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.