2012-06-22 36 views

Trả lời

168
echo "some data for the file" >> fileName 
+0

Tên của nhà điều hành này là gì? Tôi muốn tìm hướng dẫn về nó. –

+21

toán tử> chuyển hướng đầu ra sang tệp ghi đè tệp nếu có tệp. >> sẽ thêm vào tệp hiện có. –

+1

Cảm ơn bạn, đây là liên kết đến trang wiki, trong trường hợp ai đó cần nó http://en.wikipedia.org/wiki/Redirection_(computing)#Redirecting_standard_input_and_standard_output –

34

Bạn có thể chuyển hướng đầu ra của một lệnh vào một tệp:

$ cat file > copy_file 

hoặc thêm vào sau nó

$ cat file >> copy_file 

Nếu bạn muốn viết trực tiếp lệnh là echo 'text'

$ echo 'Hello World' > file 
+0

Nếu bạn cần quyền root: 'sudo sh -c 'cat file>/etc/init/gunicorn.conf'' (nhờ lời bình luận của lukaserat ở trên) – aero

86
#!/bin/sh 

FILE="/path/to/file" 

/bin/cat <<EOM >$FILE 
text1 
text2 
text3 
text4 
EOM 
+1

Có nhiều đầu ra đa dạng. –

+3

Người mới sẽ được hưởng lợi từ việc biết chính xác phải làm gì với tệp này. Làm thế nào để lưu nó, làm thế nào để chạy nó, vv – Danny

+0

Xin giải thích thay vì chỉ cần đưa lên một đoạn mã. Nó sẽ làm cho nó hữu ích hơn nhiều cho tất cả mọi người - đặc biệt là người mới. –

18
#!/bin/bash 

cat > FILE.txt <<EOF 

info code info 
info code info 
info code info 

EOF 
+14

Một lời giải thích về mã của bạn sẽ đi một chặng đường dài để làm cho nó dễ sử dụng hơn cho người khác. Ngay cả những chú thích từ vựng như "tài liệu ở đây" và "chuyển hướng" có thể trỏ người tìm kiếm đến các tài nguyên khác. – Palpatim

+0

Giải thích là không cần thiết cho một cái gì đó như thế này. –

+2

Thông tin về 'EOF' và kỹ thuật liên quan: http://stackoverflow.com/a/2954835/712334 –

8

Tôi thích câu trả lời này:

cat > FILE.txt <<EOF 

info code info 
... 
EOF 

nhưng sẽ đề nghị cat >> FILE.txt << EOF nếu bạn muốn chỉ cần thêm một cái gì đó vào cuối của tập tin mà không cần lau ra những gì đã tồn tại

Như thế này:

cat >> FILE.txt <<EOF 

info code info 
... 
EOF 
+1

Thêm một số giải thích với câu trả lời cho cách câu trả lời này giúp OP trong việc khắc phục sự cố hiện tại –

3

Di chuyển nhận xét của tôi dưới dạng câu trả lời, theo yêu cầu của @lycono

Nếu bạn cần phải làm điều này với quyền root, làm theo cách này:

sudo sh -c 'echo "some data for the file" >> fileName' 
8

Tôi biết đây là một câu hỏi cũ chết tiệt, nhưng như OP là về kịch bản, và thực tế là google mang lại cho tôi ở đây, mở các mô tả tập tin để đọc và viết cùng một lúc cũng nên được đề cập.

#!/bin/bash 

# Open file descriptor (fd) 3 for read/write on a text file. 
exec 3<> poem.txt 

    # Let's print some text to fd 3 
    echo "Roses are red" >&3 
    echo "Violets are blue" >&3 
    echo "Poems are cute" >&3 
    echo "And so are you" >&3 

# Close fd 3 
exec 3>&- 

Sau đó cat tập tin trên thiết bị đầu cuối

$ cat poem.txt 
Roses are red 
Violets are blue 
Poems are cute 
And so are you 

Ví dụ này gây ra tập tin poem.txt được mở để đọc và ghi trên mô tả tập tin 3. Nó cũng cho thấy rằng * hộp nix biết thêm của fd sau đó chỉ stdin, stdout và stderr (fd 0,1,2). Nó thực sự nắm giữ rất nhiều. Thông thường, số lượng tối đa các tập tin mô tả hạt nhân có thể phân bổ có thể được tìm thấy trong /proc/sys/file-max hoặc /proc/sys/fs/file-max nhưng sử dụng bất kỳ fd trên 9 là nguy hiểm vì nó có thể xung đột với fd được sử dụng bởi vỏ trong nội bộ. Vì vậy, không bận tâm và chỉ sử dụng 0-9 của fd. Nếu bạn cần thêm 9 bộ mô tả tập tin trong một tập lệnh bash, bạn nên sử dụng một ngôn ngữ khác anyways :)

Nhưng dù sao, fd cũng có thể được sử dụng theo nhiều cách thú vị.

Các vấn đề liên quan