1

バックティック演算子を使用して 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;

このコードは として返さ$linesれますがsed -n '1800, 2000 p' log.txt$file結果は返されません。sed -n '1800, 2000 p' log.txtBash ターミナルで直接使用すると、期待どおりの結果が得られます。

ここで何が間違っていますか?'文字をエスケープする必要がありますか?

編集:シェルスクリプトは数字の後にスペースを追加したため、読み間違えました。

4

1 に答える 1

3

私の推測では、それ$eofまたはあなたのパス ( log.txt) は適切ではありません。

コードをコピーして貼り付けましたが、次の調整で機能します。

  1. 構文エラーが修正されました (に;追加echo $lines)
  2. に変更$eofします(が有効な$endline場合は必要ないかもしれませんが$eof
  3. 有効なパスであることを確認してlog.txtください(これはおそらくあなたのエラーです)

それ以外の場合は、期待どおりに実行されました。

Bash では機能するが PHP では機能しない理由は、「作業ディレクトリ」が必ずしも同じではないためです。

于 2012-08-05T20:59:54.117 に答える