创建文件时for循环出错
For loop giving error while creating file
我对 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 是具有 servers.We 列表的文件文件,在这些系统上具有 sudo 根目录。
问题是当我 运行 echo "a b c" > /tcb/files/auth/x/xyz
在单独的服务器上 运行 完美。我的 for 循环中出现了上述错误的问题是什么。
你的命令越来越乱了。它远程执行 sudo echo "a b c"
并尝试将标准输出重定向到不存在的本地文件 /tcb/files/auth/x/xyz
。
您应该以某种方式将其附上,例如:
$ for i in `cat serverss`;do ssh -q $i "sudo echo 'a b c' > /tcb/files/auth/x/xyz";done
或者@CharlesDuffy 可能更喜欢:
$ while read -r line; do ssh -q $line "sudo echo 'a b c' > /tcb/files/auth/x/xyz";done < serverss
这里有两个问题:
- 您正在本地打开
/tcb/files/auth/x/xyz
,而不是在远程系统上。
sudo echo foo > bar
不提供额外的权限来帮助打开bar
。
后者是因为 something > output
在 之前打开 output
它 运行s something
。因此,sudo
在打开/tcb/files/auth/x/xyz
时还没有启动!
相反,请考虑:
ssh -q "$i" 'echo "a b c" | sudo tee /tcb/files/auth/x/xyz >/dev/null'
第一个问题已解决,因为重定向在传递给 ssh
的字符串内部,由远程 shell 变为 运行。 (如果你传递 ssh
一堆单独的参数,它只是将它们与空格组合成这样一个字符串;最好自己形成字符串,从而有更多的控制权)。
第二个问题是通过 tee
强制打开 /tcb/files/auth/x/xyz
解决的,在 tee
的权限被 sudo
.
我对 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 是具有 servers.We 列表的文件文件,在这些系统上具有 sudo 根目录。
问题是当我 运行 echo "a b c" > /tcb/files/auth/x/xyz
在单独的服务器上 运行 完美。我的 for 循环中出现了上述错误的问题是什么。
你的命令越来越乱了。它远程执行 sudo echo "a b c"
并尝试将标准输出重定向到不存在的本地文件 /tcb/files/auth/x/xyz
。
您应该以某种方式将其附上,例如:
$ for i in `cat serverss`;do ssh -q $i "sudo echo 'a b c' > /tcb/files/auth/x/xyz";done
或者@CharlesDuffy 可能更喜欢:
$ while read -r line; do ssh -q $line "sudo echo 'a b c' > /tcb/files/auth/x/xyz";done < serverss
这里有两个问题:
- 您正在本地打开
/tcb/files/auth/x/xyz
,而不是在远程系统上。 sudo echo foo > bar
不提供额外的权限来帮助打开bar
。
后者是因为 something > output
在 之前打开 output
它 运行s something
。因此,sudo
在打开/tcb/files/auth/x/xyz
时还没有启动!
相反,请考虑:
ssh -q "$i" 'echo "a b c" | sudo tee /tcb/files/auth/x/xyz >/dev/null'
第一个问题已解决,因为重定向在传递给 ssh
的字符串内部,由远程 shell 变为 运行。 (如果你传递 ssh
一堆单独的参数,它只是将它们与空格组合成这样一个字符串;最好自己形成字符串,从而有更多的控制权)。
第二个问题是通过 tee
强制打开 /tcb/files/auth/x/xyz
解决的,在 tee
的权限被 sudo
.