首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在PHP脚本中运行Linux "awk“命令

无法在PHP脚本中运行Linux "awk“命令
EN

Stack Overflow用户
提问于 2017-11-13 17:24:34
回答 1查看 562关注 0票数 3

我有shell脚本"test.sh":

代码语言:javascript
复制
  #!/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运行脚本时:

代码语言:javascript
复制
exec("su -c sh /path/to/my/script/test.sh");

我得到了以下输出:

代码语言:javascript
复制
Using awk:
Using cut: 6512  

因此,当我从PHP运行脚本时,"cut“命令是有效的,但"awk”命令不起作用,但当我从终端运行它时:

代码语言:javascript
复制
# sh test.sh

我可以同时获得awk和cut的工作!下面是“ps”的输出:

代码语言:javascript
复制
USER      PID   PPID  VSIZE  RSS   WCHAN       PC         NAME
root      6512  5115  3044   1108  poll_sched b6e4bb0c S logcat

我错过了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2017-11-13 23:22:40

您应该首先了解如何调试

你说过

当我从

运行脚本时,“剪切”命令是有效的,但是当我从终端运行脚本时,"awk“命令不起作用:

我想知道是怎么回事?

实际上在CLI中抛出如下错误

代码语言:javascript
复制
$ php -r 'exec("su -c sh /path/to/my/script/test.sh");'
su: user /path/to/my/script/test.sh does not exist

在调试代码时,您首先需要以下语法

代码语言:javascript
复制
// 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.
  • The操作系统假定,在缺少用户名的情况下,用户希望更改为根会话,因此系统会提示用户输入根密码

代码语言:javascript
复制
[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中输入以下内容

代码语言:javascript
复制
# 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

所以它变成了:

代码语言:javascript
复制
// assuming your script is executable 
exec("sudo /path/to/my/script/test.sh 2>&1", $output);
print_r($output);  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47260838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档