【问题标题】:PHP & bash; Linux; Compile my own functionPHP & bash; Linux;编译我自己的函数
【发布时间】:2010-05-01 12:16:32
【问题描述】:

我想制作自己的程序,但我不知道如何......例如,我想制作一个典型的“Hello $user”程序。

所以..

├── 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 程序?

【问题讨论】:

  • 您能否更详细地解释一下“将所有这些文件编译成一个 bash 程序”是什么意思?
  • 我想做一个 bash 命令,比如 'cd, cal & so on..'。在这种情况下,“你好”命令。在'.bashrc'中添加别名并不简单..
  • 创建一个名为“~/bin”的目录。编辑您的~/.bashrc 文件,使您的PATH 包含~/bin。将您的脚本复制到~/bin,将其重命名为“hi”(不带.sh)。从命令行重新启动会话或源 ~/.bashrc 后,新的 PATH 将生效。然后你可以在命令行输入“hi User”etvoilà.

标签: php linux bash


【解决方案1】:

你没有。如果你想把它放在一个脚本中,那么你首先把它放在一个脚本中。

【讨论】:

    【解决方案2】:

    我认为我们不理解这个问题,因为您可以像这样调用 hi_to.sh:

    ./hi_to.sh user
    

    它会像你想要的那样运行,摆脱第一个 sh 脚本。

    【讨论】:

    • 我用 php&bash 制作了一个更复杂的脚本,在这里我试着做一个简单的例子来解释我想要什么。..
    【解决方案3】:
    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 以查找应该使用您的脚本的用户/帐户(无需输入绝对路径)

    【讨论】:

      【解决方案4】:

      我能看到这种“组合”的唯一方法是使用 here-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 编写其他脚本的令人讨厌的演示,但至少证明了它是可能的。这是我能想到的唯一方法来“组合”(如您所指)您发布的两个脚本。

      【讨论】:

      • 您可以在没有临时文件的情况下执行此操作:(@ 表示换行,因为我们无法格式化 cmets)php -q /dev/stdin &lt;&lt;EOF@&lt;?php echo "hello\n"; ?&gt;@EOF
      • @Dennis,如果您想编辑我的答案以添加该内容,请随意:) 我相对确定(此时)OP 会希望看到 here-doc 的结果用于调试的文件,特别是由于需要转义 php 而不是 bash 应该扩展的变量。
      • 不,我只是提供了一种方法来让事情更加“编译”。我不提倡任何一种方法。做这样的事情只是自找麻烦。
      猜你喜欢
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 2014-06-14
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多