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程序?
你不知道。如果你想要在一个脚本中,那么你首先将它放在一个脚本中。
我不认为我们明白这个问题,因为你可能只是调用hi_to.sh这样的:
./hi_to.sh user
而且,它还将运行像你想,摆脱第一sh脚本的。
我已经用php&bash制作了一个更复杂的脚本,在这里我试图做一个简单的例子来解释我想要的东西。 – flienteen 2010-05-01 12:30:06
- 确保shebang线指向正确的PHP可执行
- 您不必调用脚本hi.php,只是把它
hi
- 使你的脚本文件的可执行文件(例如,通过
chmod u+x path/to/hi
或chmod a+rx path/to/hi
,见http://en.wikipedia.org/wiki/Chmod) - 确保文件就是应该用你的脚本的用户/帐户搜索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.php
。 mktemp(1)
是一种更安全的方法,可以使临时文件名更耐受链接攻击和冲突。
它还保存了PHP的退出状态retval
,然后在脚本退出时返回。
生成的文件看起来像这样(假设第一个参数的shell脚本foo
):
<?php
$string="foo";
echo "\nHello " . $string . "\n";
?>
这是一种关于如何使用bash编写其他脚本的过甜的论证,但在最少证明它是可能的。它是我能想到的“结合”的唯一方法(如您所示)您发布的两个脚本。
你可以做到这一点,没有临时文件:(@表示一个换行符,因为我们无法格式化注释)'php -q/dev/stdin @ EOF' – 2010-05-01 16:10:06
@丹尼斯,如果你想编辑我的答案并添加它,请随意:)我相对确定(在这一点上)OP将希望在文件中看到here-doc的结果用于调试,特别是由于需要跳转变量,而不是bash应该扩展。 – 2010-05-01 16:39:44
不,我只是提供了一种让事情更“编译”的方式。我不主张任何一种方法。做这样的事情只是要求麻烦。 – 2010-05-01 18:14:21
你能详细解释一下“将所有这些文件编译成一个bash程序”是什么意思吗? – 2010-05-01 12:34:26
我想做一个bash命令,比如'cd,cal等等。'。在这种情况下,'hello'命令。不容易在'.bashrc'中添加一个别名.. – flienteen 2010-05-01 12:45:11
创建一个名为“〜/ bin”的目录。编辑你的'〜/ .bashrc'文件,使PATH包含'〜/ bin'。将你的脚本复制到'〜/ bin'中,重命名为“hi”(不带'.sh')。从命令行重新启动会话或源'〜/ .bashrc'后,新的PATH将生效。然后你可以在命令行* etvoilà*键入“hi User”。 – 2010-05-01 13:03:05