开发者

PHP & bash; Linux; Compile my own function

I would like to make my own program but I have no idea how.. for example I want to make a typical 'Hello $user' program.

So..

├─开发者_运维技巧─ 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";
?>

Run it in terminal:

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

HellO User

and my question is: how to compile all this files into one bash program?


You don't. If you want it in one script then you put it in one script in the first place.


I don't think we understand the question, because you could just call hi_to.sh like this:

./hi_to.sh user

And it would run like you want, getting rid of the first sh script.


  1. Make sure the shebang line points to the correct php executable
  2. You don't have to call the script hi.php, just call it hi
  3. Make your script file executable ( e.g. via chmod u+x path/to/hi or chmod a+rx path/to/hi, see http://en.wikipedia.org/wiki/Chmod)
  4. Make sure the file is within the search PATH for the user/accounts that are supposed to use your script (without typing the absolute path)


The only way I could see this 'combined' is by using a here-doc, which basically causes the first script to generate the second, then execute it:

#!/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

In that example, $1 will expand to the first argument. I have escaped the other variables (that are related only to PHP), which PHP will expand when it runs. $$ in a shell script just expands to the PID of the script, the actual temporary file is going to be something like /tmp/1234.php. mktemp(1) is a much safer way to make a temporary file name that is more resistant to link attacks and collisions.

It also saves the exit status of PHP in retval , which is then returned when the script exits.

The resulting file will look like this (assuming the first argument to the shell script is foo):

<?php
   $string="foo";
   echo "\nHello " . $string . "\n";
?>

This is kind of an icky demonstration for how to use bash to write other scripts, but at least demonstrates that its possible. Its the only way I could think of to 'combine' (as you indicated) the two scripts that you posted.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜