Я создаю и запускаю скрипт оболочки из php скрипта. Скрипт имеет if
, Команды на then
не бегать, когда они должны, а вместо этого команды в else
бежать, когда они не должны. Когда я запускаю тот же скрипт из командной строки, он работает как положено.
php файл:
<?php
.....
$msg = "#! /bin/sh\n\n";
file_put_contents($scriptfile, $msg, LOCK_EX);
$cmd = "/usr/bin/pdftohtml -noframes -q -p -s -i $renfilenc\n";
file_put_contents($scriptfile, $cmd, FILE_APPEND | LOCK_EX);
$noExtfile = preg_replace('"\.(pdf|PDF)$"', '', $renfilenc);
$cmd = "if [[ \$(grep -c -o \"</p>\" $noExtfile.html) -le 5 ]];
then
/usr/bin/gs -dNOPAUSE -q -r500 -sDEVICE=tiffg4 -dBATCH -sOutputFile=$noExtfile.tiff $renfilenc
/usr/bin/tesseract $noExtfile.tiff $noExtfile -c tessedit_create_hocr=1 -c hocr_font_info=1
else
/usr/bin/unoconv -f docx $noExtfile.html
/usr/bin/curl -i -F \"Profile=jsi\" -F \"Output=url\" -F \"Language=en\" -F \"infile=@$noExtfile.docx\" -F \"submit=Submit\" http://nl.ijs.si/tei/cgi/convert.pl > TEIconvert.log
grep -E -o \"http://.*\" TEIconvert.log > wgetline.log
sed -r \"s/^(.*).$/wget \\1\/tei.xml -O $noExtfile.xml/g\" wgetline.log > wgetTEIfile.sh
/bin/sh wgetTEIfile.sh
fi";
file_put_contents($scriptfile, $cmd, FILE_APPEND | LOCK_EX);
$cmd = "/bin/sh $scriptfile > /dev/null 2>&1 &";
shell_exec($cmd);
.....
?>
созданный файл скрипта:
#! /bin/sh
/usr/bin/pdftohtml -noframes -q -p -s -i USNews_Bostonian_image.pdf
if [[ $(grep -c -o "</p>" USNews_Bostonian_image.html) -le 5 ]];
then
/usr/bin/gs -dNOPAUSE -q -r500 -sDEVICE=tiffg4 -dBATCH -sOutputFile=USNews_Bostonian_image.tiff USNews_Bostonian_image.pdf
/usr/bin/tesseract USNews_Bostonian_image.tiff USNews_Bostonian_image -c tessedit_create_hocr=1 -c hocr_font_info=1
else
/usr/bin/unoconv -f docx USNews_Bostonian_image.html
/usr/bin/curl -i -F "Profile=jsi" -F "Output=url" -F "Language=en" -F "infile=@USNews_Bostonian_image.docx" -F "submit=Submit" http://nl.ijs.si/tei/cgi/convert.pl > TEIconvert.log
grep -E -o "http://.*" TEIconvert.log > wgetline.log
sed -r "s/^(.*).$/wget \1\/tei.xml -O USNews_Bostonian_image.xml/g" wgetline.log > wgetTEIfile.sh
/bin/sh wgetTEIfile.sh
fi
В этом случае команды на then
должен бежать, а не те, на else
,
Есть идеи, если что-то не так или отсутствует?
Я нашел ответ здесь: https://superuser.com/questions/374406/why-do-i-get-not-found-when-running-a-script
Так что в моем PHP я изменил:
$msg = "#! /bin/sh\n\n";
а также
$cmd = "/bin/sh $scriptfile > /dev/null 2>&1 &";
в
$msg = "#!/bin/bash \n\n";
а также
$cmd = "/bin/bash $scriptfile > /dev/null 2>&1 &";
соответственно
Других решений пока нет …