Câu trả lời:
echo "some data for the file" >> fileName
sudo sh -c 'echo "some data for the file" >> fileName'
#!/bin/sh
FILE="/path/to/file"
/bin/cat <<EOM >$FILE
text1
text2 # This comment will be inside of the file.
The keyword EOM can be any text, but it must start the line and be alone.
EOM # This will be also inside of the file, see the space in front of EOM.
EOM # No comments and spaces around here, or it will not work.
text4
EOM
Bạn có thể chuyển hướng đầu ra của lệnh sang tệp:
$ cat file > copy_file
hoặc thêm vào 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
sudo sh -c 'cat file > /etc/init/gunicorn.conf'
(nhờ nhận xét của lukaserat ở trên)
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
cat > FILE.txt
sau đó nhấn ctrl + D khi bạn hoàn thành .
Tôi biết đây là một câu hỏi cũ chết tiệt, nhưng vì OP nói về kịch bản, và thực tế là google đã đưa tôi đến đây, nên mở các mô tả tệp để đọc và viết cùng một lúc.
#!/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 làm cho tệp poem.txt được mở để đọc và ghi trên bộ mô tả tệp 3. Nó cũng cho thấy các hộp * nix biết nhiều fd hơn sau đó chỉ là stdin, stdout và stderr (fd 0,1,2). Nó thực sự giữ rất nhiều. Thông thường, số lượng mô tả tệp tối đa mà kernel có thể phân bổ có thể được tìm thấy trong /proc/sys/file-max
hoặc /proc/sys/fs/file-max
sử dụng bất kỳ fd nào trên 9 đều nguy hiểm vì nó có thể xung đột với fd được sử dụng bởi shell. Vì vậy, đừng bận tâm và chỉ sử dụng 0-9 của fd. Nếu bạn cần thêm 9 mô tả tệp trong tập lệnh bash, bạn nên sử dụng một ngôn ngữ khác :)
Dù sao đi nữa, fd có thể được sử dụng theo nhiều cách thú vị.
Tôi thích câu trả lời này:
cat > FILE.txt <<EOF
info code info
...
EOF
nhưng sẽ đề xuất cat >> FILE.txt << EOF
nếu bạn muốn thêm một cái gì đó vào cuối tập tin mà không xóa sạch những gì đã tồn tại
Như thế này:
cat >> FILE.txt <<EOF
info code info
...
EOF
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 làm điều này với quyền root, hãy làm theo cách này:
sudo sh -c 'echo "some data for the file" >> fileName'
echo "some data for the file" | sudo tee -a fileName >/dev/null
chỉ chạy tee
như root.
Đối với các môi trường không có tài liệu ở đây ( Makefile
, Dockerfile
v.v.), bạn thường có thể sử dụng printf
cho một giải pháp hợp lý và hiệu quả.
printf '%s\n' '#!/bin/sh' '# Second line' \
'# Third line' \
'# Conveniently mix single and double quotes, too' \
"# Generated $(date)" \
'# ^ the date command executes when the file is generated' \
'for file in *; do' \
' echo "Found $file"' \
'done' >outputfile
Tôi nghĩ rằng có một vài câu trả lời hoàn toàn tốt, nhưng không có tóm tắt ngắn gọn về tất cả các khả năng; do đó:
Hiệu trưởng cốt lõi đằng sau hầu hết các câu trả lời ở đây là chuyển hướng . Hai là toán tử chuyển hướng quan trọng để ghi vào tệp:
echo 'text to completely overwrite contents of myfile' > myfile
echo 'text to add to end of myfile' >> myfile
Những người khác được đề cập, thay vì từ một nguồn đầu vào cố định như echo 'text'
, bạn cũng có thể tương tác ghi vào các tệp thông qua "Tài liệu ở đây", cũng được nêu chi tiết trong liên kết đến hướng dẫn sử dụng bash ở trên. Những câu trả lời, vd
cat > FILE.txt <<EOF
hoặc là cat >> FILE.txt <<EOF
sử dụng các toán tử chuyển hướng tương tự, nhưng thêm một lớp khác thông qua "Tài liệu ở đây". Trong cú pháp trên, bạn viết thư cho FILE.txt thông qua đầu ra của cat
. Việc viết chỉ diễn ra sau khi đầu vào tương tác được đưa ra một số chuỗi cụ thể, trong trường hợp này là 'EOF', nhưng đây có thể là bất kỳ chuỗi nào, ví dụ:
cat > FILE.txt <<'StopEverything'
hoặc là cat >> FILE.txt <<'StopEverything'
cũng sẽ làm việc như vậy. Tại đây Tài liệu cũng tìm kiếm các dấu phân cách khác nhau và các ký tự phân tích cú pháp thú vị khác, vì vậy hãy xem các tài liệu để biết thêm thông tin về điều đó.
Một chút phức tạp và nhiều bài tập để hiểu cả cú pháp chuyển hướng và cú pháp Tài liệu ở đây, nhưng bạn có thể kết hợp cú pháp kiểu Tài liệu ở đây với các toán tử chuyển hướng tiêu chuẩn để trở thành Chuỗi ở đây:
Chuyển hướng đầu ra của mèo đầu vàocat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
Cũng có thể sử dụng ở đây tài liệu và vi, tập lệnh bên dưới tạo FILE.txt với 3 dòng và nội suy biến
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
Sau đó, tập tin sẽ có 3 dòng như dưới đây. "i" là bắt đầu chế độ chèn vi và tương tự để đóng tệp bằng Esc và ZZ.
#This is my var in text file
var = Test
#Thats end of text file