Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 附加到受保护的文件_Macos_Bash_Shell_Unix - Fatal编程技术网

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