Единственный способ, которым я мог видеть это «комбинированное», - это использовать документ here, который в основном заставляет первый скрипт генерировать второй, а затем выполнять его:
#!/bin/sh
cat << EOF > /tmp/$$.php
<?php
\$string="$1";
echo "\nHellO ". \$string ."\n";
?>
EOF
/usr/bin/php -q /tmp/$$.php
retval=$?
rm /tmp/$$.php
exit $retval
В этом примере $1
расширится до первого аргумента. Я избежал других переменных (которые связаны только с PHP), которые PHP будет расширять при запуске. $$
в сценарии оболочки просто расширяется до PID сценария, фактический временный файл будет выглядеть примерно как /tmp/1234.php
. mktemp(1)
- гораздо более безопасный способ создания временного имени файла, более устойчивого к атакам ссылок и коллизиям.
Также сохраняется состояние выхода PHP в retval
, которое затем возвращается при выходе из сценария.
Полученный файл будет выглядеть следующим образом (при условии, что первый аргумент скрипта оболочки foo
):
<?php
$string="foo";
echo "\nHello " . $string . "\n";
?>
Это своего рода странная демонстрация того, как использовать bash для написания других скриптов, но, по крайней мере, демонстрирует, что это возможно. Единственный способ, которым я мог придумать, - «объединить» (как вы указали) два сценария, которые вы опубликовали.