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.
- Make sure the shebang line points to the correct php executable
- You don't have to call the script hi.php, just call it
hi
- Make your script file executable ( e.g. via
chmod u+x path/to/hi
orchmod a+rx path/to/hi
, see http://en.wikipedia.org/wiki/Chmod) - 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.
精彩评论