脚本没有写入 /etc/network/interfaces 的权限

脚本没有写入 /etc/network/interfaces 的权限

setip你好,我必须编写一个可以像这样运行的脚本:

./setip <ip> <mask>

并且必须在接口上将IP 地址设置为<ip>并将掩码设置为。以下是我的脚本的内容,但是当我尝试运行它时,我收到错误“权限被拒绝”。我的脚本有什么问题,我该如何处理?<mask>lo1

#! /bin/bash
sudo echo 
"
auto lo:1
iface lo:1 inet static
address $1
netmask $2" >/etc/network/interfaces

答案1

sudo echo "  
auto lo:1  
iface lo:1 inet static  
address $1  
netmask $2" | sudo tee /etc/network/interfaces

脚本的最后一行netmask $2" >/etc/network/interfaces尝试编辑只有 root 可以写入的接口文件。(或者至少它应该由 root 拥有)
但是,sudo echo "" >它可能不会按您希望的方式工作。

它正在echo ""使用 root 权限执行,但>操作员并未使用这些权限执行。

您可能需要重新格式化您的命令此示例的。在这种情况下,输出到文件的命令是以 root 身份运行的,而其他命令则不必如此。我在上面已经向您展示了一个示例。

答案2

我认为它并没有像sudo你想象的那样工作。实际上,它sudo只会影响echo命令 - 它实际上不会将你需要的内容输出到/etc/network/interfaces/文件中,因为sudo实际上并没有覆盖>

那么你能做什么呢?你有两个选择:

  1. 重新格式化您的命令,使其像 robobenklein 在其答案中提供的链接中提供的命令一样工作。
  2. 运行整个脚本,sudo以超级用户身份有效地运行整个命令,并且重定向可能会起作用。

答案3

您需要运行chmod +x setip以允许您的脚本可执行。有关文件权限的更多信息,请参见这里

相关内容