我正在编写一个bash shell脚本,其目的是为新项目创建一个php框架。
为了在新创建的目录结构中创建某些php文档,我使用了带有大量代码行的herdocs。。

sudo tee $projectname/www/index.php <<- EOF | > null
<?php

ob_start();

require_once 'inc/header.inc';

ob_end_flush();
?>
EOF

## Create header.inc
sudo tee $projectname/www/inc/header.inc <<- EOF 1>&2

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
....
EOF

问题是:
所有的HEREDOC线都会反射到屏幕上。那不是我想要的,看起来很乱。
所以,我试图通过将输出重定向到null/dev/null来发出这个问题。不幸的是没有成功。
研究:
Preventing output from commands in Batch
Echo in heredoc / nowdoc syntax
Outputting variable within Heredoc
http://wiki.bash-hackers.org/syntax/redirection

最佳答案

重定向语法不正确。失去|

sudo tee $projectname/www/index.php <<-EOF >/dev/null

您的另一个重定向尝试1>&2只会将标准输出重定向到标准错误,而标准错误(通常)最终会出现在屏幕上。这很有用,但不是因为你想完成。
不过,最好是以您自己的身份创建项目,并使用单独的(版本控制和)部署基础结构来发布生产版本,前提是您具有适当的质量和完整性。然后你不需要sudo,然后你就不需要tee
cat <<-EOF >$projectname/www/index.php

sudo tee file >/dev/null技巧是一种反模式,使您能够在使用cat时编写类似于sudo的文件。

关于php - 防止屏幕输出heredoc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27689811/

10-12 22:30