Macos 附加到受保护的文件
我想做以下几点:Macos 附加到受保护的文件,macos,bash,shell,unix,Macos,Bash,Shell,Unix,我想做以下几点: echo "Append string" >> protected_file 然而,由于这个文件是写保护的,我得到了一个错误。运行: sudo echo "Append string" >> protected_file 似乎在echo命令上运行sudo,但仍然向我提供了权限错误,如何将其附加到此文件?获取字面答案 sudo sh -c 'echo "Append string" >> protected_file' 但我原则上同意希万
echo "Append string" >> protected_file
然而,由于这个文件是写保护的,我得到了一个错误。运行:
sudo echo "Append string" >> protected_file
似乎在echo命令上运行sudo,但仍然向我提供了权限错误,如何将其附加到此文件?获取字面答案
sudo sh -c 'echo "Append string" >> protected_file'
但我原则上同意希万猛禽
说明:>
是一个shell操作符。如果调用sudo命令
,则不会运行另一个shell;因此,如果不重定向sudo
(这样做最终会在重定向时为您提供错误的用户id),则无法重定向echo
。诀窍是在sudo
中启动一个单独的shell,您可以在其中发出重定向操作符。或者尝试以下操作:
echo "echo 'append string' >> protected_file" | sudo bash
将所有这些放在一起并确定其中一个答案,有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
你应该
sudo
你的shell脚本,而不是echo
命令。谢谢,但这只是我在cmd行上写的一个命令,而不是在shell脚本+1中——与公认的答案不同,它不会给不需要它们的任何东西额外的特权,如果内容是由比echo更复杂的东西生成的,那么这一点很重要。为什么需要>/dev/null?@Richard:因为tee
将输出发送到文件和标准输出(两个位置,就像管道中的“tee”),我们不需要额外的输出。将标准重定向到/dev/null
会丢弃它。
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