ルートとして、コマンドラインから次を実行します。
if [[ -e /var/log/apache2/error.log ]]; then echo YES; fi
YES
しかし、スクリプトではそうではありません。
if [[ -e /var/log/apache2/error.log ]]; then
echo YES
fi
なぜこれが起こるのかご存知ですか?予想される出力やエラーは発生しません。
スクリプトの最初の行は次のとおりです。#!/bin/bash
私はスクリプトがPHPスクリプト(www-admin)によって呼び出されるため、ファイル権限のためである可能性があると思いましたが、error.logファイルには読み取り権限があります。
-rw-r--r-- 1 root adm 1763810 Sep 17 09:02 /var/log/apache2/error.log
親フォルダ権限
drwxr-xr-x 10 root root 4096 Mar 20 2019 var
drwxr-xr-x 5 root root 12288 Sep 17 06:25 log
drwxr-xr-x 2 root root 4096 Sep 17 06:25 apache2
PHPスクリプトはbashスクリプトをどのように呼び出すのですか?
$cmd = "sh myscript.sh";
$output = array();
$output = shell_exec($cmd);
IF文なしでスクリプトが正しく実行されます。
ベストアンサー1
bashスクリプト呼び出しを使用していますsh
。これは通常デフォルトのPOSIXシェルですdash
。たとえば、これは[[
POSIXではなく、bashism(他のシェルにもあります)なのでsh
サポートしません。
$ dash -c "if [[ 10 -gt 8 ]]; then echo yeah; fi"
dash: 1: [[: not found
したがって、標準を使用するようにスクリプトを変更します[
(とにかく特別な機能を使用しません[[
)。
if [ -e /var/log/apache2/error.log ]; then
echo YES
fi
あるいは、PHPスクリプトを変更し、bashを使用して明示的に呼び出します。
$cmd = "bash myscript.sh";
あるいは、shebangがあり、#!/bin/bash
スクリプトに実行可能なビットが設定されていると仮定して直接呼び出すだけです。
$cmd = "./myscript.sh";