2012-08-05 39 views
1

我有一个PHP脚本,通过使用反引号操作符在Bash中执行命令从文件中检索200行。下面的代码是什么样子:PHP:反驳无法使用命令

$endline = `(shell execution that returns a number here)`; 
$line = $endline - "200"; 
$lines = "sed -n '".$line.", ".$endline." p' log.txt"; 

echo $lines; 
$file = `$lines`; 
echo $file; 

此代码返回$linessed -n '1800, 2000 p' log.txt,但$file不返回任何结果。当在Bash终端直接使用sed -n '1800, 2000 p' log.txt时,我会得到预期的结果。

在这里做了什么不正确? '角色必须逃脱吗?

编辑: shell脚本在数字后面加了一个空格,因此误读了它。

+0

你没有执行命令 – 2012-08-05 20:51:36

+1

尝试'$ file = system($ lines)' – favoretti 2012-08-05 20:55:39

+0

@ColeJohnson反引号不会被视为执行命令吗? – hexacyanide 2012-08-05 21:01:46

回答

3

我的猜测是它的$eof或您的路径(log.txt)不合适。

我复制并粘贴代码,并将其与以下的调整工作:

  1. 语法错误固定(添加;echo $lines
  2. 变化$eof$endline(尽管你可能并不需要,如果$eof是有效的
  3. 确保log.txt是一个有效的路径(这很可能是你的错误)

否则,它按预期运行。

它会在Bash而不是在PHP中工作的原因是他们的“工作目录”不一定是相同的。

+0

是的,这是我在发布时忘记的一堆垃圾,真实的代码与此不同。我已经完成了'ls -al'等确认文件目录。 – hexacyanide 2012-08-05 21:00:39

+0

你确定你有权限运行shell命令吗?你可以做'echo''pwd \';'? – 2012-08-05 21:04:02

+0

我有权限,我已经启动了进程并用反引号列出了目录内容。注意:原始帖子中修复了语法错误。 – hexacyanide 2012-08-05 21:04:59