2013-11-11 3 views
0

У меня есть код Javascript, который используется для определения параметра, который затем должен быть перенаправлен на сценарий bash на целевом устройстве. Затем скрипт bash копирует новый файл и перезагружает систему. Я использую AJAX, чтобы сделать вызов сценария Баш и код выглядит следующим образом:Выполнение скрипта bash с параметрами из Javascript

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); 

Скрипт Баш выглядит следующим образом

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

cp /config_file$CONFIG_NUMBER /file_to_use 

reboot 

Сценарий правилен и работает, если я использую его из командную строку непосредственно на машине и вручную передать переменную, но при вызове из Javascript система перезагружается, но не копирует файл. Я пропустил какой-то код отладки и код исключения, например, проверяя, что $1 не пуст, но это, похоже, не проблема. Любая помощь очень ценится.

ответ

0

Решил проблему. Сценарий bash должен быть обновлен, чтобы использовать $ QUERY_STRING, а не $ 1. Это может быть затем обработан (если вы передаете более чем один из параметров), чтобы получить все Титулы нужно

#!/bin/sh 
CONFIG_NUMBER=$QUERY_STRING 

cp /config_file$CONFIG_NUMBER /file_to_use 

reboot 

Примечание

Для работы с командной строки, а также из Javascript вы должны разместить как $ QUERY_STRING и $ 1 и т. Д.

0

Может быть, попробуйте добавить «синхронизацию» между копией и перезагрузками в случае файловой системы не правильно промывка ...

+0

Хм, не будет ли это во все времена, однако, даже запустив его в командной строке, который не имеет такой же проблемы? Я предположил, что файл может быть тем же, что и независимый от сайта, предполагающий привилегии, как правильные, какие они есть. –

0

Попробуйте удалить команду reboot и использовать эту команду вместо вашей линии:

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

Это будет пытаться скопировать файл, и если есть какие-либо ошибки, он будет выводить их в error_copy.log ..

Я подозревал, что привилегии записи файла/каталога не может быть правильно настроен на вашей системе. Другими словами, вопрос заключается в том, что если пользователь, который копирует файл, имеет на это право.

+0

Это было бы возможным решением, но система должна выполнить перезагрузку, чтобы новые настройки использовались грустно –

+0

Нет prob .. просто проверьте его, чтобы мы могли определить проблему;) Я просто хотел сэкономить время, не перезапустив .. это не решение, просто способ определить проблему. – Dropout

+0

Записывает ли он что-нибудь в error_copy.log? – Dropout

Смежные вопросы