【问题标题】:Running php via a unix script通过 unix 脚本运行 php
【发布时间】:2012-05-02 14:08:05
【问题描述】:

我有上面的shell脚本。

#!/bin/bash

# a shell script that keeps looping until an exit code is given

nice php -q -f ./data.php -- $@
ERR=$?

exec $0 $@

我有几个疑问

  1. 什么是$0,什么是$@
  2. 什么是ERR=$?
  3. 第 5 行的 -- $@ 做了什么
  4. 我想知道是否可以将 data.php 作为参数传递。所以我只有我所有类型的执行的 shell 脚本。说,我想运行“sh ss.sh data1.php”,那么这应该运行 data1.php,如果运行“ss ss.sh data2.php”,它应该运行 data2.php –

【问题讨论】:

  • $@ 参数 $0 第一个参数 ERR 是执行的返回值
  • -- $@ 将所有参数传递给 php linux.die.net/man/1/php
  • 现在我明白了你的第四个问题.. 尝试类似“`php $1 -- $@``
  • 似乎无法正确引用这些引文.. arrgh

标签: php linux shell


【解决方案1】:

1) $0 是可执行文件的名称(您的脚本,例如:如果您的脚本称为start_me,那么$0start_me

2)ERR=$?获取nice php -q -f ./data.php -- $@的返回码

3) -- $@ 做了两件事,首先它告诉php 命令所有后续参数都应该传递给data.php$@ 将所有给定的参数传递给脚本到./data.php(例如../your_script_name foo bar 将转换为nice php -q -f ./data.php -- foo bar)

4) 简短回答是,但您必须将脚本更改为

 YOUR_FILE=$1
 shift #this removes the first argument from $@
 nice php -q -f ./$YOUR_FILE -- $@

【讨论】:

    【解决方案2】:
    $0 
    

    是脚本的名称。

    $@ 
    

    是给脚本的参数

    ERR=$? 
    

    捕捉上一条命令的状态码

    php_command="php -q -f $1"
    shift
    nice $php_command -- $@
    

    您获取 f 标志的第一个参数,然后将其移出参数列表并在双破折号后传递其余参数。

    【讨论】:

    • 我想运行 "sh ss.sh data.php" 。这个运行运行 data.php 我如果运行“ss ss.sh data2.php”它应该运行 data2.php
    • 最后一行是否适用于您的情况,即 exec $0 $@
    • 你不应该调用 exec 函数,因为它会再次执行你的程序。这可能会导致递归循环。
    猜你喜欢
    • 2018-09-27
    • 2021-06-04
    • 2011-07-27
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    相关资源
    最近更新 更多