PHP & bash; Linux; Скомпилируйте мою собственную функцию - PullRequest
2 голосов
/ 01 мая 2010

Я хотел бы создать свою собственную программу, но я понятия не имею, как ... например, я хочу сделать типичную программу 'Hello $ user'.

Итак ..

├── hi
│   ├── hi.sh
│   ├── hi_to.sh

hi.sh

#!/bin/bash
~/hi/hi_to.sh $1 

hi_to.sh

#!/usr/bin/php
<?php
    echo "\nHellO ".$argv[1]."\n";
?>

Запустите его на терминале:

me:~/hi  
→ ./hi.sh User

HellO User

и мой вопрос: как собрать все эти файлы в одну программу bash?

Ответы [ 4 ]

1 голос
/ 01 мая 2010

Ты не. Если вы хотите, чтобы это было в одном скрипте, то вы сначала поместите его в один скрипт.

0 голосов
/ 01 мая 2010

Единственный способ, которым я мог видеть это «комбинированное», - это использовать документ 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 для написания других скриптов, но, по крайней мере, демонстрирует, что это возможно. Единственный способ, которым я мог придумать, - «объединить» (как вы указали) два сценария, которые вы опубликовали.

0 голосов
/ 01 мая 2010
  1. Убедитесь, что строка shebang указывает на правильный исполняемый файл php
  2. Вам не нужно вызывать скрипт hi.php, просто назовите его hi
  3. Сделайте ваш файл скрипта исполняемым (например, через chmod u+x path/to/hi или chmod a+rx path/to/hi, см. http://en.wikipedia.org/wiki/Chmod)
  4. Убедитесь, что файл находится в поиске PATH для пользователей / учетных записей, которые должны использовать ваш скрипт (без ввода абсолютного пути)
0 голосов
/ 01 мая 2010

Не думаю, что мы понимаем вопрос, потому что вы могли бы просто вызвать hi_to.sh так:

./hi_to.sh user

И он будет работать так, как вы хотите, избавившись от первого скрипта sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...