2012-06-22 74 views

回答

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

此运算符的名称是什么?我想找一个关于它的手册。 –

+21

运算符>将输出重定向到覆盖文件(如果存在)的文件。 >>将附加到现有的文件。 –

+1

谢谢你,这里是链接到维基页面,以防有人需要它http://en.wikipedia.org/wiki/Redirection_(computing)#Redirecting_standard_input_and_standard_output –

34

您可以重定向的命令将文件输出:

$ cat file > copy_file 

或者如果你想直接写命令追加到它

$ cat file >> copy_file 

echo 'text'

$ echo 'Hello World' > file 
+0

如果你需要root权限:'sudo sh -c'cat file> /etc/init/ gunicorn.conf''(感谢上面的lukaserat的评论) – aero

86
#!/bin/sh 

FILE="/path/to/file" 

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

很好的采用多行输出。 –

+3

新手将从确切知道如何处理此文件中受益。如何保存它,如何运行等。 – Danny

+0

请解释一下,而不是简单地放一段代码。这会让每个人都更有帮助 - 特别是新手。 –

18
#!/bin/bash 

cat > FILE.txt <<EOF 

info code info 
info code info 
info code info 

EOF 
+14

对你的代码的解释将会使它更加适用于其他人。即使像“here document”和“redirection”这样的词汇表可以将搜索者指向其他资源。 – Palpatim

+0

对于这样的事情,解释并不是那么必要。 –

+2

关于'EOF'和相关技术的信息:http://stackoverflow.com/a/2954835/712334 –

8

我喜欢这样的回答:

cat > FILE.txt <<EOF 

info code info 
... 
EOF 

但建议cat >> FILE.txt << EOF如果你只想添加一些文件的末尾而不消灭什么是已经存在

像这样:

cat >> FILE.txt <<EOF 

info code info 
... 
EOF 
+1

添加一些解释并回答这个答案如何帮助OP解决当前问题 –

3

移动我的评论作为答案,请求@lycono

如果您需要root权限才能做到这一点,做这种方式:

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

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

此示例文件导致文件一下poem.txt是开放的阅读和文件描述符写3.这也表明,* nix的箱子了解更多FD当时只是stdin,stdout和stderr(fd 0,1,2)。它实际上持有很多。通常情况下,内核可以分配的最大文件描述符数可以在/proc/sys/file-max/proc/sys/fs/file-max中找到,但使用高于9的任何fd是危险的,因为它可能与shell在内部使用的fd相冲突。所以不要打扰,只能使用fd的0-9。如果您在bash脚本需要更多的9个文件描述符,你应该使用不同的语言反正:)

总之,FD的可以在很多有趣的方式使用。

相关问题