我有一個簡單的bash腳本,我從我的php代碼中調用以找出我的apache和nginx的版本。sh:2:1:not found - 將多個php參數傳遞給bash腳本
$webroot = getcwd();
function get_version($name)
{
global $webroot;
switch ($name)
{
case "apache":
$path = shell_exec("whereis apachectl | awk '{ print $2 }'");
$version = shell_exec("sudo $webroot/scripts/get_version $path 1 2>&1");
break;
case "nginx":
$path = shell_exec("whereis nginx | awk '{ print $2 }'");
$version = shell_exec("sudo $webroot/scripts/get_version $path 2 2>&1");
default:
echo "error";
}
return $version;
}
正如你所看到的,我打電話給我的bash腳本傳遞了兩個參數。
#!/bin/bash
_x=""
_programm=$1
_nr=$2
if [ "$_nr" -eq "1" ] ; then
_x=$($_programm -v 2>/dev/null | grep -i 'version' | awk -F/ '{ print $4 }')
elif [ "$_nr" -eq "2" ] ; then
_x=$($_programm -v 2>&1 | awk -F/ '{ print $2 }')
fi
cd $(pwd)
echo $_x
的功能輸出:
get_version("apache"); OUTPUT: sh: 2: 1: not found
get_version("nginx"); OUTPUT: sh: 2: 2: not found
但如果我執行終端的bash腳本,然後它和我得到的,我在我的bash腳本使用的路徑和一個整數版本號作爲輸出,我試着用戶root
和www-data
,都工作。 bash腳本也輸入到visudo文件中並具有執行權限,腳本的用戶是www-data。
./get_version /usr/sbin/apachectl 1 OUTPUT: 2.2.2
./get_version /usr/sbin/nginx 2 OUTPUT: 1.3
有人可以請解釋爲什麼它在終端工作,但不是在PHP?
不應該在'print $ 2'的雙引號中反斜線'$'? – choroba
你的意思是這樣的:'print \ $ 2'?我嘗試過,但後來我得到語法錯誤。 – Black