运行shell命令并将输出发送到文件?

时间:2013-07-01 03:11:09

标签: php linux bash

我需要能够通过php脚本修改我的openvpn auth文件。我已经让我的http用户成为了一个无通道的sudoer,因为这台机器只能在我的家庭网络中使用。

我目前有以下命令:

echo shell_exec("sudo echo '".$username."' > /etc/openvpn/auth.txt");
echo shell_exec("sudo echo '".$password."' >> /etc/openvpn/auth.txt");

但是在运行时,它们根本不会更改文件,或者在php中提供任何输出。

我如何使这项工作?

2 个答案:

答案 0 :(得分:3)

您可以以root身份运行副本,而不是以root身份运行整个shell进程(可能是不安全的):

(使用bash):

sudo cp <(echo "$username") /etc/openvpn/auth.txt

(应该适用于任何shell):

echo "$username" | sudo dd of=/etc/openvpn/auth.txt

答案 1 :(得分:1)

运行时

sudo command > file

只有命令以sudo身份运行,而不是重定向。

正如您所指出的那样,sudo sh -c "command > file"会起作用。但除非你真的想以command作为sudo运行,否则你不应该这样做。您只能以sudo身份运行重定向部分。 rici的答案涵盖了两种方法。这是另一种方法:

command | sudo tee filename >/dev/null #to overwrite (command > file)
command | sudo tee -a filename >/dev/null # to append (command >> file)