我尝试生成多行输出到文件但是有Permission denied错误。你知道出了什么问题吗?
#!/bin/bash
something.html << END # Permission denied
<tag></tag>
Some text
more tags
more text
END
答案 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