Answers:
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
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
我知道这是一个该死的老问题,但是由于OP是关于脚本编写的,并且对于google将我带到这里的事实,还应该提到同时打开用于读取和写入的文件描述符。
#!/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>&-
然后cat
在终端上的文件
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
此示例导致打开文件poem.txt以便在文件描述符3上进行读取和写入。它还显示* nix框比stdin,stdout和stderr(fd 0,1,2)知道更多的fd。它实际上占有很多。通常,可以在/proc/sys/file-max
或中找到内核可以分配的文件描述符的最大数量,/proc/sys/fs/file-max
但是使用高于9的任何fd都是危险的,因为它可能会与内部使用的Shell使用的fd相冲突。因此,请勿打扰,仅使用fd的0-9。如果您在bash脚本中需要更多9个文件描述符,则无论如何都应使用其他语言:)
无论如何,fd可以以许多有趣的方式使用。
按照@lycono的要求将我的评论作为答案
如果您需要使用root特权来执行此操作,请按照以下方式进行操作:
sudo sh -c 'echo "some data for the file" >> fileName'
echo "some data for the file" | sudo tee -a fileName >/dev/null
仅以tee
root 身份运行。
对于此处没有文档的环境(Makefile
,Dockerfile
等),您通常可以使用它printf
来作为合理易读且有效的解决方案。
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
我以为有几个非常好的答案,但是没有所有可能性的简要总结。从而:
此处大多数答案背后的核心原理是重定向。对于写入文件,有两个重要的重定向操作符:
echo 'text to completely overwrite contents of myfile' > myfile
echo 'text to add to end of myfile' >> myfile
提到的其他内容echo 'text'
,也可以通过“此处的文档”以交互方式写入文件,而不是通过固定的输入源,该文档在上面的bash手册的链接中也有详细介绍。这些答案,例如
cat > FILE.txt <<EOF
要么 cat >> FILE.txt <<EOF
使用相同的重定向运算符,但通过“此处文档”添加另一层。在上述语法中,您通过的输出写入FILE.txt cat
。仅在给交互式输入指定了一些特定的字符串(在这种情况下为“ EOF”)之后才进行写操作,但这可以是任何字符串,例如:
cat > FILE.txt <<'StopEverything'
要么 cat >> FILE.txt <<'StopEverything'
也会一样工作。在这里,文档还会寻找各种分隔符和其他有趣的解析字符,因此请查看文档以获取有关此内容的更多信息。
有点费解,并且更多地是在理解重定向和Here Documents语法方面的练习,但是您可以将Here Document样式语法与标准重定向运算符结合在一起,成为Here String:
重定向cat输入的输出cat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
也可以在这里使用文件和vi,下面的脚本生成带有3行和变量插值的FILE.txt
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
然后文件将有3行,如下所示。“ i”将启动vi插入模式,并类似地使用Esc和ZZ关闭文件。
#This is my var in text file
var = Test
#Thats end of text file