- 此问题在此处已有答案**:
how to redirect output of echo over ssh to a file(2个答案)
sudo echo "something" >> /etc/privilegedFile doesn't work [duplicate](15个答案)
5年前关闭。
我对for循环有一个问题。我会为你简单介绍一下。
$ for i in `cat serverss`;do ssh -q $i sudo echo "a b c" > /tcb/files/auth/x/xyz;done
ksh: /tcb/files/auth/x/xyz: cannot create
每当我尝试创建或修改一个文件时,我都会遇到上述错误。serverss是具有服务器列表的文件。我们在这些系统上有sudo根。
问题是当我在单独的服务器上运行echo "a b c" > /tcb/files/auth/x/xyz
时,它运行得很完美。我的for循环中有什么问题导致了上面的错误。
2条答案
按热度按时间dauxcl2d1#
您的命令被破坏了。它远程执行
sudo echo "a b c"
并尝试将标准输出重定向到不存在的本地文件/tcb/files/auth/x/xyz
。您应该以某种方式将其包含在内,例如:
或者像@CharlesDuffy可能更喜欢的那样:
j13ufse22#
这里有两个问题:
/tcb/files/auth/x/xyz
,而不是在远程系统上。sudo echo foo > bar
不提供额外的特权来帮助打开bar
。后者是因为
something > output
在运行something
之前**打开output
,因此,当/tcb/files/auth/x/xyz
打开时,sudo
甚至还没有启动!相反,请考虑:
第一个问题解决了,因为重定向是在传递给
ssh
的字符串内,由远程shell运行(如果您传递给ssh
一串独立的参数,它只是将它们与空格组合起来形成这样一个字符串;最好自己构造字符串,从而拥有更多的控制)。第二个问题可以通过强制
/tcb/files/auth/x/xyz
由tee
打开来解决,* 在 *tee
的权限由sudo
提升之后。