[英]Can't run Linux “awk” command in script from PHP
我有shell腳本“test.sh”:
#!/system/bin/sh
PID=$(ps | grep logcat | grep root |grep -v grep | awk '{print $2}')
echo "Using awk: $PID"
PID=$(ps | grep logcat | grep root |grep -v grep | cut -d " " -f 7 )
echo "Using cut: $PID"
當我從PHP運行腳本時:
exec("su -c sh /path/to/my/script/test.sh");
我得到了這個輸出:
Using awk:
Using cut: 6512
所以“cut”命令是可行的,但是當我從PHP運行腳本時,“awk”命令不起作用,但是當我從終端運行它時:
# sh test.sh
我可以得到awk和切割工作正常! 這看起來像“ps”的輸出:
USER PID PPID VSIZE RSS WCHAN PC NAME
root 6512 5115 3044 1108 poll_sched b6e4bb0c S logcat
我錯過了什么嗎?
您應該先學習如何調試
你說
所以“cut”命令是可行的,但是當我從PHP運行腳本時,“awk”命令不起作用,但是當我從終端運行它時:
我好奇怎么樣?
在CLI中實際上會拋出如下所示的錯誤
$ php -r 'exec("su -c sh /path/to/my/script/test.sh");'
su: user /path/to/my/script/test.sh does not exist
在調試代碼時,首先需要以下語法
// basic : stdin (0) stdout (1) stderr (2)
exec('your_command 2>&1', $output, $return_status);
// to see the response from your command
// su: user /path/to/my/script/test.sh does not exist
print_r($output);
記住 :
su
為您提供root權限,但它不會更改PATH
變量和當前工作目錄。操作系統假設在沒有用戶名的情況下,用戶想要更改為根會話,因此提示用戶輸入root密碼
[akshay@localhost Desktop]$ su
Password:
[root@localhost Desktop]# pwd
/home/akshay/Desktop
[root@localhost Desktop]# exit
exit
[akshay@localhost Desktop]$ su -
Password:
[root@localhost ~]# pwd
/root
解:
您應該允許在沒有密碼提示的情況下執行腳本(不要使用su
use sudo
)
要允許apache用戶執行您的腳本和一些命令,您可以在/etc/sudoers
進行如下所示的輸入
# which awk => give you awk path
# same use in your script also, or else set path variable
www-data ALL=NOPASSWD: /path/to/my/script/test.sh, /bin/cut, /usr/bin/awk
所以它變成:
// assuming your script is executable
exec("sudo /path/to/my/script/test.sh 2>&1", $output);
print_r($output);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.