私は簡単なことを試みていますが、それを理解できません。サイトディレクトリからphpスクリプトを呼び出す1つのシェルスクリプトを実行しようとしています。私のシェルスクリプトは簡単ですtest.sh
:
#!/bin/sh
LIST="/path/to/my/site/dir"
CONFIG="/usr/bin/php "
for i in $LIST
do
. "${CONFIG}${i}/test.php"
done
私のtest.php
にはエラーがなく、ブラウザで直接実行すると動作します。再び簡単なスクリプトのように
<?php
// source code
?>
./test.sh
を実行すると、結果は
./test.sh:8:。:/ usr/bin/php /path/to/my/site/dir/test.phpを開けません
行8は. "${CONFIG}${i}/test.php"
です
PHPファイルの先頭にもこの行を追加しようとしましたが、結果は同じです
#!/usr/bin/php
更新:phpへのパス
$ which -a php
/usr/bin/php
chmod +x test.php
も作成しました
ここでの問題は、単一の変数として実行しようとしているentioreコマンドを引用していることです。その結果、foo.php
を引数としてphp
を実行せず、代わりにphp foo.php
というファイルを実行しようとしています。ここに、私が何を意味するかを示す簡単な例を示します。
$ var1="echo "
$ var2="foo"
$ set -x ## debugging info
$ "$var1$var2"
+ 'echo foo' ### The Shell tries to execute both vars as a single command
bash: echo foo: command not found
$ "$var1" "$var2"
+ 'echo ' foo ### The Shell tries to execute 'echo ' (echo with a space)
bash: echo foo: command not found
そのため、正しい方法はスペースを削除して各変数を個別に引用することです。
$ var1="echo"
$ var2="foo"
$ "$var1" "$var2"
ただし、それを行うと、次のエラーが発生します。 .
は source
コマンド です。これは、Shellスクリプトを読み取って、現在のセッションで実行しようとします。代わりにphpスクリプトを提供しています。それは動作しません、あなたはexecuteそれではなく、sourceを実行する必要がありますそれ。
最後に、CAPITAL変数名の使用は常に避けてください。シェルの予約変数は大文字であるため、スクリプトには常に小文字の変数名を使用することをお勧めします。
これらすべてを(他のいくつかのマイナーな改良を加えて)まとめると、あなたが望むものは次のようなものになります:
#!/bin/sh
list="/path/to/my/site/dir"
config="/usr/bin/php"
for i in "$list"
do
"$config" "$i"/test.php
done
コードの問題は次の行です。
. "${CONFIG}${i}/test.php"
.
を削除します
別の例を次に示します。
$ ls -l
-rwxrwxr-x 1 bg bg 67 Oct 20 09:42 index.php
-rwxrwxr-x 1 bg bg 68 Oct 20 09:43 test.sh
index.php
<?php
Shell_exec('echo Hello > /tmp/hello.txt');
?>
test.sh
#!/bin/bash
/usr/bin/php index.php
通常、コマンドphpは、シェルのPHPスクリプトの解釈に使用されます。
$ php /path/script-name.php
私は簡単なtest.shを作成し、それは動作します:
$ cat ./text.sh
#!/bin/bash
Sudo php /var/www/wiki/maintenance/update.php
$ chmod +x ./test.sh
$ ./test.sh
できます。
その後、例として複雑なスクリプトを作成しました。
$ cat ./text.sh
#!/bin/sh
LIST=/var/www/wiki/maintenance
CONFIG=/usr/bin/php
for i in $LIST
do
${CONFIG} ${i}/update.php
done
$ Sudo ./test.sh
できます!
$ cat ./text.sh
#!/bin/sh
LIST="/var/www/wiki/maintenance"
CONFIG="/usr/bin/php "
for i in $LIST
do
${CONFIG}${i}/update.php
done
$ Sudo ./test.sh
また動作します!