【问题标题】:Append to protected file附加到受保护的文件
【发布时间】:2012-05-28 18:00:38
【问题描述】:

我想做一些类似的事情:

echo "Append string" >> protected_file

但是,由于此文件受写保护,我收到错误消息。运行:

sudo echo "Append string" >> protected_file

似乎在 echo 命令上运行 sudo,仍然给我权限错误,我该如何追加到这个文件?

【问题讨论】:

  • 你应该sudo你的shell脚本,而不是echo命令。

标签: macos bash shell unix


【解决方案1】:

将所有内容放在一起并确定其中一个答案,有 3 种方法:

sudo su root -c "echo 'append string' > protected_file"
echo "echo 'append string' >> protected_file" | sudo bash
echo "append string" | sudo tee -a protected_file >/dev/null

【讨论】:

    【解决方案2】:
    echo "Append string" | sudo tee -a protected_file >/dev/null
    

    【讨论】:

    • +1 - 与接受的答案不同,它不会为不需要它们的任何东西提供额外的特权,如果内容是由比 echo 更复杂的东西生成的,这将很重要.
    • 为什么需要 >/dev/null?
    • @Richard:因为tee 将输出发送到文件到标准输出(两个地方 - 就像管道中的“三通”),我们不想要额外的输出。将标准重定向到/dev/null 会丢弃它。
    【解决方案3】:

    或者试试这个:

    echo "echo 'append string' >> protected_file" | sudo bash
    

    【讨论】:

      【解决方案4】:

      对于一个字面的答案,

      sudo sh -c 'echo "Append string" >> protected_file'
      

      但我原则上同意 ShivanRaptor。

      解释:>> 是一个 shell 操作符。如果你调用sudo command,你不会运行另一个shell;因此,如果不重定向sudo,您将无法重定向echo(这最终会在进行重定向时为您提供错误的用户ID)。诀窍是在sudo 内启动一个单独的shell,您可以在其中发出重定向运算符。

      【讨论】:

      • 谢谢,但这只是我在 cmd 行上写的一个命令,而不是在 shell 脚本中
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 2017-09-18
      • 2015-09-05
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 2010-09-22
      相关资源
      最近更新 更多