通过Unix脚本运行php

3
我有上述的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 是执行后的返回值。 - Osama Javed
Doubts? - Quentin
-- $@ 将所有参数传递给 php http://linux.die.net/man/1/php - Osama Javed
现在我理解你的第四个问题了..试试这样的代码 "php $1 -- $@" - Osama Javed
似乎无法正确地获取那些引号.. 哎呀 - Osama Javed
2个回答

1

1) $0 是可执行文件的名称(在您的情况下是脚本,例如:如果您的脚本名为start_me,那么$0就是start_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 -- $@

0
$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。 - aWebDeveloper
在你的情况下,最后一行是否成立,即执行 $0 $@? - aWebDeveloper
你不应该调用exec函数,因为它会再次执行你的程序。这可能会导致递归循环。 - Tikkes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接