如何在Linux中通过shell脚本自动将数据写入文本文件?

我打开了文件。但是,我不知道如何写入数据。


当前回答

你可以将命令的输出重定向到一个文件:

$ cat file > copy_file

或者附加到它

$ cat file >> copy_file

如果你想直接写入命令是echo 'text'

$ echo 'Hello World' > file

其他回答

对于这里的文档不可用的环境(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
#!/bin/bash

cat > FILE.txt <<EOF

info code info 
info code info
info code info

EOF 

移动我的评论作为一个答案,由@lycono要求

如果你需要用root权限来做这件事,这样做:

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

也可以使用这里的文档和vi,下面的脚本生成一个FILE.txt 3行和变量插值

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

我知道这是一个该死的老问题,但由于OP是关于脚本的,而且谷歌将我带到了这里,因此还应该提到同时打开文件描述符以进行读写。

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

This example causes file poem.txt to be open for reading and writing on file descriptor 3. It also shows that *nix boxes know more fd's then just stdin, stdout and stderr (fd 0,1,2). It actually holds a lot. Usually the max number of file descriptors the kernel can allocate can be found in /proc/sys/file-max or /proc/sys/fs/file-max but using any fd above 9 is dangerous as it could conflict with fd's used by the shell internally. So don't bother and only use fd's 0-9. If you need more the 9 file descriptors in a bash script you should use a different language anyways :)

无论如何,fd可以以许多有趣的方式使用。