Ant*_*ber 7 command-line bash sudo io-redirection tee
这两个命令都有效:(注意-S
insudo
告诉 sudo 从 stdin 读取密码)。
echo 'mypassword' | sudo -S tee -a /etc/test.txt &> /dev/null
echo -e '\nsome\nmore\ntext' | sudo tee -a /etc/test.txt &> /dev/null
Run Code Online (Sandbox Code Playgroud)
现在我想将两者结合起来,即在一行中实现所有内容。但是,当然,这样的事情是行不通的:
echo -e '\nsome\nmore\ntext' | echo 'mypassword' | sudo -S tee -a /etc/test.txt &> /dev/null
Run Code Online (Sandbox Code Playgroud)
什么会起作用?谢谢:) - 负载
PS:无关紧要的小问题: 1> 是否与 > 相同?我相信他们是..
这将:
{ echo 'mypassword'; echo 'some text'; } | sudo -k -S tee -a /etc/test.txt &>/dev/null
Run Code Online (Sandbox Code Playgroud)
问题的关键是sudo
,并tee
使用相同的标准输入,这样既会从相同的源读取。我们应该将“mypassword”+“\n”放在我们想要传递给的任何东西之前tee
。
{...}
视为一个命令。无论是{...}
写入管道。echo 'mypassword'
将“mypassword\n”写入管道。这是sudo
稍后阅读。echo 'some text'
将“一些文本\n”写入管道。这就是tee
最终会达到的。sudo -k -S
从它的标准输入(管道)读取密码,直到它到达“\n”。所以“mypassword\n”将在这里被消耗。该-k
开关是为了确保sudo
提示输入密码并忽略最近使用过的用户缓存凭据。tee
从 stdin 读取,它得到里面剩下的任何东西,“一些文本\n”。PS:关于 I/O 重定向:是的,你说得对,1>filename
与>filename
. 它们都将 stdout 重定向到filename。并且0<filename
和<filename
是相同的,都重定向标准输入。
归档时间: |
|
查看次数: |
15503 次 |
最近记录: |