2010-05-01 2 views
2

Я хотел бы создать свою собственную программу, но я понятия не имею, как .. например, я хочу создать типичную программу Hello $ user.PHP & bash; Linux; Компиляция моей собственной функции

Так ..

├── 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 

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

+0

Можете ли вы более подробно объяснить, что вы подразумеваете под «скомпилировать все эти файлы в одну программу bash»? –

+0

Я хочу сделать одну команду bash, например 'cd, cal & so on ..'. В этом случае команда «привет». не просто добавить псевдоним в «.bashrc». – flienteen

+1

Создайте каталог под названием «~/bin». Измените файл '~/.bashrc', чтобы ваш PATH включал' ~/bin'. Скопируйте свой скрипт в '~/bin', переименовав его в« привет »(без' .sh'). После перезапуска сеанса или источника '~/.bashrc' из командной строки новый PATH вступит в силу. Затем вы можете ввести «привет пользователь» в командной строке * et voilà *. –

ответ

1

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

0

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

./hi_to.sh user 

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

+0

Я сделал еще один сложный скрипт с php & bash, и здесь я попытался сделать простой пример для объяснения того, что я хочу. – flienteen

0
  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

Единственный способ, которым я мог видеть это «комбинированный» является использование здесь-документ, который в основном вызывает первый скрипт для создания второго, а затем выполнить его:

#!/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"; 
?> 

Это своего родом неприглядной демонстрации для того, как использовать Баш писать другие сценарии, но в наименее демонстрирует, что это возможно. Это единственный способ, которым я мог подумать «объединить» (как вы указали) два сценария, которые вы разместили.

+0

Вы можете сделать это без временного файла: (@ указывает на новую строку, поскольку мы не можем форматировать комментарии) 'php -q/dev/stdin << EOF @ @ EOF' –

+0

@Dennis, если вы хотите отредактировать мой ответ, чтобы добавить это, не стесняйтесь :) Я относительно уверен (на данный момент) OP захочет увидеть результаты здесь-doc в файле для отладки, особенно из-за необходимости избегать переменных, которые php, а не bash, должны расширяться. –

+0

Нет, я просто предлагал способ сделать что-то более «скомпилированным». Я не сторонник ни одного подхода. Выполнение таких вещей просто требует неприятностей. –