Строка канала с новой строкой для управления в ударе?

Я пытаюсь передать в строке, содержащей новую строку к Сценарию PHP через Bash.

#!/bin/bash

REPOS="$1"
REV="$2"

message=$(svnlook log $REPOS -r $REV)
changed=$(svnlook changed $REPOS -r $REV)

/usr/bin/php -q /home/chad/www/mantis.localhost/scripts/checkin.php <<< "${message}\n${changed}"

Когда я делаю это, я вижу литерал "\n", а не завершенная новая строка:

blah blah issue 0000002.\nU app/controllers/application_controller.rb

Какие-либо идеи, как перевести '\n' в литеральную новую строку?

Между прочим: что делает <<<, делают в ударе? Я знаю <передачи в файле...

14
задан Chad Johnson 13 August 2010 в 13:47
поделиться

3 ответа

try

echo -e "${message}\n${changed}" | /usr/bin/php -q /home/chad/www/mantis.localhost/scripts/checkin.php 

где -e разрешает интерпретацию escape-символов обратной косой черты (согласно man echo )

Обратите внимание, что это также будет интерпретировать escape-символы обратной косой черты, которые могут быть у вас в $ {message} и в $ {изменено} .


Из руководства bash: Здесь Strings

Вариант здесь документов, формат следующий:

<<<word

Слово раскрывается и передается команде на ее стандартный ввод.

Я бы сказал, что

the_cmd <<< word

эквивалентно

echo word | the_cmd
21
ответ дан 1 December 2019 в 10:17
поделиться

Чтобы избежать интерпретации потенциальных escape-последовательностей в $ {message} и $ {changed} , попробуйте объединить строки в подоболочке ( новая строка добавляется после каждого echo , если вы не указали параметр -n ):

( echo "${message}" ; echo "${changed}" ) | /usr/bin/php -q /home/chad/www/mantis.localhost/scripts/checkin.php 

Скобки выполняют команды в подоболочке (если скобки не указаны, только вывод второе эхо будет передано в вашу программу php).

1
ответ дан 1 December 2019 в 10:17
поделиться
newline=$'\n'
... <<< "${message}${newline}${changed}"

Код <<< называется "here string". Это однострочная версия "here doc", которая не требует разделителя, такого как "EOF". Это версия here document:

... <<EOF
${message}${newline}${changed}
EOF
4
ответ дан 1 December 2019 в 10:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: