我有一个PHP脚本,它通过使用反引号运算符在Bash中执行命令从文件中检索200行。这是代码的样子:
$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;
此代码将$lines
作为sed -n '1800, 2000 p' log.txt
返回,但$file
不会返回任何结果。在Bash终端中直接使用sed -n '1800, 2000 p' log.txt
时,我会得到预期的结果。
这里做错了什么?是否必须转义'
个字符?
编辑: shell脚本在数字后面添加了一个空格,因此误读了它。
答案 0 :(得分:3)
我的猜测是,$eof
或您的路径(log.txt
)不合适。
我复制并粘贴了您的代码,它可以使用以下调整:
;
添加到echo $lines
)$eof
更改为$endline
(如果$eof
有效,则可能不需要log.txt
是有效路径(这很可能是您的错误)否则,它按预期运行。
它在Bash中工作但在PHP中不起作用的原因是它们的“工作目录”不一定相同。