我正在尝试一些简单但无法弄清楚的事情。尝试运行一个从站点目录调用 php 脚本的 shell 脚本。我的 shell 脚本很简单test.sh
:
#!/bin/sh
LIST="/path/to/my/site/dir"
CONFIG="/usr/bin/php "
for i in $LIST
do
. "${CONFIG}${i}/test.php"
done
我test.php
没有错误,当我直接在浏览器中运行它时它正在工作。它再次简单的脚本,如
<?php
// source code
?>
当我运行./test.sh
结果是
./test.sh: 8: .: 无法打开 /usr/bin/php /path/to/my/site/dir/test.php
8号线是. "${CONFIG}${i}/test.php"
我也尝试在 PHP 文件的开头添加这一行,但结果是一样的
#!/usr/bin/php
更新:php的路径
$ which -a php
/usr/bin/php
我也做过chmod +x test.php
您的代码中的问题是:
去除
.
这是另一个例子:
$ ls -l
索引.php
测试.sh
通常命令 php 用于解释 shell 中的 PHP 脚本。
我做了简单的 test.sh 并且它有效:
有用。
之后,我制作了复杂的脚本作为您的示例:
有用!
也有效!
这里的问题是您引用了您尝试作为单个变量运行的 entiore 命令。结果,您没有以
php
withfoo.php
作为参数运行,而是尝试执行名为php foo.php
. 这是一个更简单的示例,可以向您展示我的意思:因此,正确的方法是删除空格并分别引用每个变量:
如果你这样做,你会遇到下一个错误。
.
是source
命令。_ 它试图读取一个shell脚本并在当前会话中执行它。您正在给它一个 php 脚本。那行不通,您需要执行它,而不是获取它。最后,始终避免使用大写变量名。shell 的保留变量是大写的,因此最好始终为脚本使用小写变量名。
将所有这些放在一起(以及其他一些小的改进),您想要的是: