【问题标题】:Prevent screen output heredoc防止屏幕输出heredoc
【发布时间】:2014-12-29 13:26:58
【问题描述】:

我正在编写一个 bash shell 脚本,其目的是为新项目创建一个 php 框架。

为了在新创建的目录结构中创建某些 php 文档,我使用带有大量代码行的 HEREDOCs..

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来发出这个问题。可惜没有成功。

研究:

【问题讨论】:

    标签: php bash output echo heredoc


    【解决方案1】:

    您的重定向语法不正确。丢|

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

    您有1&gt;&amp;2 的另一个重定向尝试只会将标准输出重定向到标准错误,无论如何(通常)最终都会出现在您的屏幕上。它很有用,但不是你想要完成的。

    最好自己创建项目并使用单独的(版本控制和)部署基础架构来发布生产版本,前提是您拥有合适的质量和完整性。那么你就不需要sudo,然后你就不需要tee。

    cat <<-EOF >$projectname/www/index.php
    

    sudo tee file &gt;/dev/null 技巧是一种反模式,使您能够在使用 sudo 时像 cat 那样编写文件。

    【讨论】:

    • @Etan Reisner 感谢您的建议! /dev/null 部分解决了输出问题!
    • FWIW,我更喜欢 sudo dd of=/path/to/file &lt;&lt;-EOF 而不是 sudo tee hack,但显然首先避免使用 sudo 更好。
    • @kzpm:如果网络服务器可以执行sudo,那么你还不如给它写目录的权限;显然,如果需要它们,它就会拥有它们。存在更好的解决方案,但这将是一个不同的问题,并且可以说在系统管理员 QA 站点上问得更好。无论如何,我还是更喜欢sudo dd 而不是sudo tee(因为你不必处理丢弃输出),但口味各不相同。
    • @rici 感谢您的观察 rici,我会尝试“dd”。从来没有想过有人可以将 dd 也用于此特定目的。
    猜你喜欢
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2023-03-16
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    相关资源
    最近更新 更多