【问题标题】:Sed command through shell_exec not being executed通过 shell_exec 的 Sed 命令没有被执行
【发布时间】:2017-07-15 05:54:45
【问题描述】:

我想在单击 html 代码中的按钮后执行 shell 命令,所以:

在我的html代码中:

<form action=execute.php method="post">
    <input name="submit" type="submit" value="Reset">
</form>

执行.php:

<?php
    $output = shell_exec("sed -i '2,3d' filename.txt");
    //$output = shell_exec("cat filename.txt");
    echo "<pre>$output</pre>";

    $url = htmlspecialchars($_SERVER['HTTP_REFERER']);   
    echo "<a href='$url'>Back</a>"; 
?>

目的是删除文本文件的所有行,但第一行除外。

我认为 php 代码正在正确执行,因为如果我通过一个简单的 cat 修改 shell 命令,它会按预期工作,但我无法弄清楚为什么当要执行的命令是 @987654323 时它什么都不做@表达式。

我已经验证了这样的sed 命令在直接在 CLI 中执行时有效,并且我也放弃了任何权限问题,因为我将“filename.txt”更改为 777。事实上,如果更改 php 代码以将一些文本附加到该文件也有效。例如:

$output = shell_exec("echo hi >> filename.txt");

在查找信息后,我意识到我想要的可以直接用 php 完成:

file_put_contents("filename.txt", "");
file_put_contents("filename.txt", "First_line_content");

但现在我只是好奇为什么我的sed 命令不起作用。

我正在使用以下sed 版本的 Ubuntu 桌面上运行 LAMP:

$ sed --version
sed (GNU sed) 4.2.2

【问题讨论】:

    标签: php html bash sed shell-exec


    【解决方案1】:

    由于 sed 在与文件相同的目录中创建一个临时文件,因此脚本必须对该目录具有写权限。

    【讨论】:

    • 确实:即使目标文件存在,sed仍然需要将perm写入当前目录才能写入tmp文件!
    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多