Как передать смешанную строку из php через канал в сценарий bash

Я ищу возможность отправить смешанную многострочную строку PHP с помощью proc_open (exec, passthru или что-то еще) через канал в сценарий bash. Наконец, в этом скрипте я хочу получить смешанную многострочную строку и сохранить ее в переменной.

PHP:

// static way
$some_multiline_string = 'some $%§%& mixed &/(/( 
content 
with newlines';

// dynamic way:
// the mixed content is coming from the database
// so actually it is not initialized like in the previous lines, but more like this:
$some_multiline_string = $db_result['some_multiline_string'];

// escaping
$some_multiline_string = escapeshellargs($some_multiline_string);

// execution
$process = proc_open("printf $some_multiline_string | some_script.sh args");
...

Баш:

#!/bin/bash
mixed_multiline_string=$(</dev/stdin)
echo -e "$mixed_multiline_string"
...

Как правильно избежать смешанного содержимого, прежде чем использовать его в команде? Я уже пробовал escapeshellargs и escapeshellcmd, но либо есть неэкранированный символ, который останавливает процесс, либо он работает, но требует слишком много времени (1,5 минуты) для обработки.

Вот ссылка на пример строки смешанного содержимого: http://playmobox.com/js/test.txt

Большое спасибо!


person playmobox    schedule 25.11.2016    source источник


Ответы (1)


Я не знаю PHP, но bash должен сделать что-то вроде одного поста в верхней части справа:

#!/usr/bin/env bash

declare    line  ; line=
declare -a line_ ; line_=()

while IFS= read -r line ; do
    line_+=( "${line}" )
done < /dev/stdin

printf "%s\n" "${line_[@]}"

Предполагается, что имя сценария some_script.sh вы можете сделать

% echo '&Ω↑ẞÐĦØđ¢ø' | bash some_script.sh
&Ω↑ẞÐĦØđ¢ø

while IFS= read -r line объясняется здесь: Bash, читать построчно из файла, с IFS и на bash wiki

  • IFS настроен на пустую строку, чтобы предотвратить удаление начальных и конечных пробелов каждой строки при чтении. — Ричард Хансен
  • -r необработанный ввод — отключает интерпретацию экранирования обратной косой черты и продолжения строки в прочитанных данных.
person crst    schedule 25.11.2016
comment
Большое спасибо за помощь! - person playmobox; 29.11.2016