Запретить вывод на экран здесьdoc

Я пишу сценарий оболочки bash, целью которого является создание скелета php для новых проектов.

Чтобы создать определенные php-документы во вновь созданной структуре каталогов, я использую HEREDOC с множеством строк кода.

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. К сожалению безуспешно.

Исследовать:


person kzpm    schedule 29.12.2014    source источник


Ответы (1)


Ваш синтаксис перенаправления неверен. Потерять |

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.

person tripleee    schedule 29.12.2014
comment
@Etan Reisner Спасибо за ваши предложения! Часть ‹‹-EOF ›/dev/null решила проблему вывода! - person kzpm; 29.12.2014
comment
FWIW, я предпочитаю sudo dd of=/path/to/file <<-EOF взлому sudo tee, но, очевидно, лучше вообще избегать sudo. - person rici; 29.12.2014
comment
@kzpm: если веб-сервер может выполнять sudo, вы можете просто дать ему права на запись в каталог; очевидно, они у него есть, если они ему нужны. Существуют лучшие решения, но это был бы другой вопрос, и, возможно, его лучше задать на сайте контроля качества системного администратора. В любом случае, я по-прежнему предпочитаю sudo dd sudo tee (потому что вам не нужно иметь дело с отбрасыванием вывода), но вкусы различаются. - person rici; 29.12.2014
comment
@rici Спасибо за ваше наблюдение, Ричи, я попробую «дд». Никогда не думал, что можно использовать dd также для этой конкретной цели. - person kzpm; 30.12.2014