PHP & bash; Linux;编译我自己的功能

问题描述:

我想制作自己的程序,但我不知道如何......例如,我想制作一个典型的“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 

,我的问题是:如何编译这一切文件到一个bash程序?

+0

你能详细解释一下“将所有这些文件编译成一个bash程序”是什么意思吗? – 2010-05-01 12:34:26

+0

我想做一个bash命令,比如'cd,cal等等。'。在这种情况下,'hello'命令。不容易在'.bashrc'中添加一个别名.. – flienteen 2010-05-01 12:45:11

+1

创建一个名为“〜/ bin”的目录。编辑你的'〜/ .bashrc'文件,使PATH包含'〜/ bin'。将你的脚本复制到'〜/ bin'中,重命名为“hi”(不带'.sh')。从命令行重新启动会话或源'〜/ .bashrc'后,新的PATH将生效。然后你可以在命令行* etvoilà*键入“hi User”。 – 2010-05-01 13:03:05

你不知道。如果你想要在一个脚本中,那么你首先将它放在一个脚本中。

我不认为我们明白这个问题,因为你可能只是调用hi_to.sh这样的:

./hi_to.sh user 

而且,它还将运行像你想,摆脱第一sh脚本的。

+0

我已经用php&bash制作了一个更复杂的脚本,在这里我试图做一个简单的例子来解释我想要的东西。 – flienteen 2010-05-01 12:30:06

  1. 确保shebang线指向正确的PHP可执行
  2. 您不必调用脚本hi.php,只是把它hi
  3. 使你的脚本文件的可执行文件(例如,通过chmod u+x path/to/hichmod a+rx path/to/hi,见http://en.wikipedia.org/wiki/Chmod
  4. 确保文件就是应该用你的脚本的用户/帐户搜索PATH内(不键入绝对路径)

我可以看到这个“组合拳”的唯一方法是通过使用这里-doc的,这基本上使第一脚本生成第二个,然后执行它:

#!/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在运行时会进行扩展。在shell脚本中的$$只是扩展到脚本的PID,实际的临时文件将会是/tmp/1234.phpmktemp(1)是一种更安全的方法,可以使临时文件名更耐受链接攻击和冲突。

它还保存了PHP的退出状态retval,然后在脚本退出时返回。

生成的文件看起来像这样(假设第一个参数的shell脚本foo):

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

这是一种关于如何使用bash编写其他脚本的过甜的论证,但在最少证明它是可能的。它是我能想到的“结合”的唯一方法(如您所示)您发布的两个脚本。

+0

你可以做到这一点,没有临时文件:(@表示一个换行符,因为我们无法格式化注释)'php -q/dev/stdin @ EOF' – 2010-05-01 16:10:06

+0

@丹尼斯,如果你想编辑我的答案并添加它,请随意:)我相对确定(在这一点上)OP将希望在文件中看到here-doc的结果用于调试,特别是由于需要跳转变量,而不是bash应该扩展。 – 2010-05-01 16:39:44

+0

不,我只是提供了一种让事情更“编译”的方式。我不主张任何一种方法。做这样的事情只是要求麻烦。 – 2010-05-01 18:14:21