权限被拒绝 - 多行输出到文件

时间:2015-12-06 11:28:22

标签: bash file shell heredoc

我尝试生成多行输出到文件但是有Permission denied错误。你知道出了什么问题吗?

#!/bin/bash

something.html << END # Permission denied
<tag></tag>
Some text
more tags
more text 
END

1 个答案:

答案 0 :(得分:0)

虽然... > file... >> file) - 输出重定向 - 可用于输出(通过附加)到file,但否< / em>对称file < ...构造在类似POSIX的shell中,例如Bash。

相反,输入重定向 < / << / <<< 隐式stdin提供输入 - 来自here-document<<),在这种情况下。

您需要命令来读取标准输入以便处理它,即使只是将其发送到文件。 在后一种情况下,您cat输出重定向结合起来cat只需将stdin输入复制到stdout,输出重定向随后将其发送到指定的文件:

#!/bin/bash

cat > something.html << END # cat with > sends stdin input to a file
<tag></tag>
Some text
more tags
more text 
END

至于您看到的症状

something.html << END # ...

导致错误,因为 something.html - 作为命令行的第一个标记,总是被解释为命令来执行< / strong> - 并且失败,因为(通常)没有这样的命令:

特定错误取决于是否有第一个令牌:

  • 是一个纯粹的文件名(例如,something.html - 没有路径组件):

    • command not found
  • 路径(无论是相对的还是绝对的;例如./something.html),并且引用:

    • 现有项目:No such file or directory
    • 现有的不可执行文件:Permission denied - 意思是:尝试执行该文件,但它不可执行。
    • 现有目录:is a directory