通过bash / shell脚本打开和写入文本文件

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

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

echo "some data for the file" >> fileName 
 #!/bin/sh FILE="/path/to/file" /bin/cat <<EOM >$FILE text1 text2 text3 text4 EOM 

您可以将命令的输出redirect到一个文件:

 $ cat file > copy_file 

或追加到它

 $ cat file >> copy_file 

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

 $ echo 'Hello World' > file 
 #!/bin/bash cat > FILE.txt <<EOF info code info info code info info code info EOF 

我喜欢这个答案:

 cat > FILE.txt <<EOF info code info ... EOF 

但会build议cat >> FILE.txt << EOF如果你只想添加一些东西到文件的末尾而不清除已经存在的东西

喜欢这个:

 cat >> FILE.txt <<EOF info code info ... EOF 

我知道这是一个该死的老问题,但是由于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>&- 

然后在terminal上cat文件

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

这个例子导致文件poem.txt在文件描述符3上被读取和写入。它还显示* nix盒知道更多的fd,然后是stdin,stdout和stderr(fd 0,1,2)。 它实际上持有很多。 通常情况下,内核可以分配的文件描述符的最大数量可以在/proc/sys/file-max/proc/sys/fs/file-max但是使用任何高于9的fd是危险的,因为它可能与fd内部的壳。 所以不要打扰,只能使用fd的0-9。 如果你需要更多的bash脚本中的9个文件描述符,你应该使用不同的语言:)

无论如何,FD可以用很多有趣的方式。

按照@lycono的要求,将我的评论作为答案移动

如果您需要以root权限执行此操作,请执行以下操作:

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