我有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 因此,当我从PHP运行脚本时,"cut“命令是有效的,但"awk”命令不起作用,但当我从终端运行它时:
# sh test.sh我可以同时获得awk和cut的工作!下面是“ps”的输出:
USER PID PPID VSIZE RSS WCHAN PC NAME
root 6512 5115 3044 1108 poll_sched b6e4bb0c S logcat我错过了什么吗?
发布于 2017-11-13 23:22:40
您应该首先了解如何调试
你说过
当我从
运行脚本时,“剪切”命令是有效的,但是当我从终端运行脚本时,"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为您提供根权限,但它不会更改PATH变量,并且当前工作的directory.[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使用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); https://stackoverflow.com/questions/47260838
复制相似问题