0

我有一些 Javascript 代码用于确定必须转发到目标设备上的 bash 脚本的参数。然后 bash 脚本复制一个新文件并重新启动系统。我正在使用 AJAX 来调用 bash 脚本,代码如下:

var config = get_config(); // Simply returns an integer

var xml_http = get_xml_http_object();
xml_http.open("GET", bash_script_id + "?" + config, false);
xml_http.send(null); 

bash 脚本如下所示

#!/bin/sh
CONFIG_NUMBER="$1"

cp /config_file$CONFIG_NUMBER /file_to_use

reboot

如果我直接在机器上从命令行使用它并手动传入一个变量,则该脚本是正确的并且可以工作,但是当从 Javascript 调用时,系统会重新启动但不会复制文件。我省略了一些调试代码和异常代码,例如检查$1不是空的,但这似乎不是问题。很感谢任何形式的帮助。

4

3 回答 3

0

解决了这个问题。必须更新 bash 脚本以使用 $QUERY_STRING 而不是 $1。然后可以对其进行解析(如果您传递了多个参数)以获取所需的所有参数

#!/bin/sh
CONFIG_NUMBER=$QUERY_STRING

cp /config_file$CONFIG_NUMBER /file_to_use

reboot

笔记

要使用命令行以及 Javascript,您必须同时容纳 $QUERY_STRING 和 $1 等。

于 2013-11-11T14:38:58.150 回答
0

如果文件系统没有正确刷新,也许可以尝试在复制和重新启动之间添加“同步”......

于 2013-11-11T14:18:10.537 回答
0

尝试删除reboot命令并使用此命令而不是您的行:

cp /config_file$CONFIG_NUMBER /file_to_use 2> error_copy.log

这将尝试复制文件,如果有任何错误,它会将它们输出到 error_copy.log..

我怀疑您的系统上可能未正确配置文件/目录写入权限。换句话说,问题是如果复制文件的用户有权这样做..

于 2013-11-11T14:18:59.367 回答