Тоже распространённая задача — вставить в файл из консоли сразу несколько строк. Но есть нюанс, в зависимости от выбора способа вставки командный интерпретатор будет, пытаться заменить переменные на их значения, или нет. Т.е. если в строке для вставки присутствует символ $, то нужно выбрать правильный способ для описания команды.
Рассмотрим на примере строк:
public function __construct(LoggerInterface $logger) {
$this->logger = $logger;
}
В данном случае важно чтобы интерпретатор командной строки не попытался заменить фрагменты $logger и $this значениями из переменных окружения. Ведь в лучшем случае он заменит это на пустую подстроку, ведь вряд ли будет существовать переменная окружения с таким названием, а в худшем случае — содержимым этой переменной окружения. Одним из самых удобных способов описания многострочных значений в консоли является синтаксис HERE DOC.
Рассмотрим способ как можно избежать подстановки переменных окружения:
cat >> file.php << 'END'
public function __construct(LoggerInterface $logger) {
$this->logger = $logger;
}
END
Обратите внимание, что END в первой строке указан в кавычках. Это необходимо для так называемого disable quoting, что уведомляет интерпретатор о том, что подставлять переменных не нужно.
Точно также это работает и с командой tee:
tee file.php << 'END'
public function __construct(LoggerInterface $logger) {
$this->logger = $logger;
}
END
Ещё один способ отключить подстановку переменных — добавить экранирование каждого символа $ добавив перед ним косую черту — \$.
Существует ещё множество способов сделать это, но в большинстве случаев это костыли, требующие выполнения дополнительных команд, например, предварительного сохранения содержимого в файл или написания команды echo для каждой новой строки.