当前位置: 首页 > 知识库问答 >
问题:

将变量从PHP传递到Ubuntu外壳脚本

薛扬
2023-03-14

我有这样一个shell脚本(在/usr/local/bin/esm script/import master.php中):

#! /bin/bash 
echo "this is the file name $1."
script -c 'PGPASSWORD="pwd123" /usr/bin/psql --host localhost --port 5432 --username "postgres" --no-password --quiet "dbESM" < "$1"' /dev/null

现在我通过这样的PHP脚本调用它:

$NewFile = "/var/www/...master-data.sql"; //full path
$strImport = '/usr/local/bin/esm-script/import-master.sh ' . $NewFile;  
$strMsg = shell_exec($strImport);
echo "$strMsg<br />";
echo 'done!';

但是,当我运行PHP代码时,我会在浏览器上看到以下消息:

this is the file name /var/www/ESM-Backend/uploads/master-data.sql. Script started, file is /dev/null Script done, file is /dev/null sh: 1: cannot open : No such file Script started, file is /dev/null
done! 

我不是一个编写shell脚本的人,所以我不知道我是否遗漏了什么。

我检查了带有sql文件的文件夹是否具有正确的权限(775)和数据(插入语句)。

那么为什么这不起作用呢?非常感谢您的任何想法和指导方针。

编辑我在shell脚本文件中硬编码的文件,如下所示:

script -c 'PGPASSWORD="#UR!23" /usr/bin/psql --host localhost --port 5432 --username "postgres" --no-password --quiet "dbESM" < "/var/www/ESM-Backend/uploads/master-data.sql"' /dev/null

而且很管用。但是我需要它运行通过PHP传递的文件。

共有2个答案

江子石
2023-03-14

首先,非常感谢Vivek给了我使用引号的想法。然后我认为错误是命令行参数被包含在外壳脚本文件的单引号中的方式。

所以我尝试了以下方法:

script -c 'PGPASSWORD="#UR!23" /usr/bin/psql --host localhost --port 5432 --username "postgres" --no-password --quiet "dbESM" < "'$1'"' /dev/null

是的,它解决了问题。

这个想法是1美元参数是在脚本命令的引用字符串之外给出的。

我对如何在bash中连接字符串也有疑问,这里有一个很好的链接:如何在bash中连接字符串变量

年风华
2023-03-14

我认为问题可能是您将参数传递给外壳脚本的方式,即$NewFile。从相关的SO Post,您可能想要尝试用双引号将参数括起来,如下所示:

$strImport = '/usr/local/bin/esm-script/import-master.sh "'.$NewFile.'"';

我假设权限设置正确,并且您可以正常使用shell\u exec()通过PHP执行shell脚本。希望这有帮助。

 类似资料:
  • 问题内容: 我有一个调用file.sql的shell脚本 我正在寻找一种将一些参数传递给我的file.sql的方法。 如果我没有将具有某个值的变量传递给sql脚本,则将不得不使用SELECT语句创建多个.sql文件,并且所有更改将只需要几个字即可。 我的shell脚本调用file.sql: 这就是我的file.sql的样子: 我可以修改我的shell脚本,以便它传递变量名吗? 即:模型=“建筑”,

  • 问题内容: 我正在使用Google Maps制作可以加载数据库中包含经纬度数据的标记的地图。我希望用户可以通过单击按钮来加载三个不同的“图层”。单击该按钮时,将在服务器上执行php函数,从而根据数据库中的信息创建xml文件。然后调用AJAX函数提取此xml数据,然后将其用于创建地图标记。没有为每个“层”使用单独的PHP函数(除了SQL查询所在的行,这是相同的东西),有没有办法将AJAX中的java

  • 问题内容: 我似乎无法从php中将变量传递给我的bash脚本。无论我如何尝试,$ uaddress和$ upassword都变为空。 *_ __ _ __ __ * __ __ bash * __ __ * * ** *_ __ _ __ * PHP __ * __ __ * __ ** *_ __ _ _ _输出和调试 _ _ _ * *_ 问题答案: 您需要将变量作为参数传递给Shell脚本,

  • 问题内容: 我在将值从JS传递到PHP时遇到问题,以便可以将其用作PHP函数的参数。一旦单击链接,JS函数将由onclick事件触发。这是JS + HTML代码: PHP(insert.php): 感谢您能为我提供帮助的人。我对PHP和JS还是很陌生,所以请原谅我的愚蠢。 问题答案: 您将数据从浏览器传递到服务器。Javascript是一种用于操纵浏览器的语言。PHP是您的服务器端语言。 您可以在

  • 问题内容: 我有以下INNER JOIN查询: 您可以在此处的SQL小提琴上的示例表上看到它的运行情况。 我的目标是返回以下内容: 但是使用以下PHP: 我得到每一行一行,而不是分组,即: 而且我不确定如何修改PHP以获取所需的输出。 当前输出 问题答案: 问题似乎在于您在为每一行调用“ head”。因此,您应该首先检查它是否已经被调用。希望以下内容对您有所帮助: 在这两种情况下(和),我将和移到

  • 问题内容: 我有一个bash脚本a.sh,其中有一个python脚本b.py。python脚本计算某些内容,我希望它返回一个值,该值稍后将在a.sh中使用。我知道我能做 在a.sh中: 在b.py中: 但这不是那么方便,因为我还在b.py中打印了其他消息 有什么更好的方法吗? 编辑: 我现在正在做的只是 这意味着我可以在b.py中打印很多东西,但是只有最后一行(假设它不包含“ \ n”,这是最后一