我的脚本出现问题。变量X和Y被分配IP地址的最后一个八位字节并且工作正常。 Z应该采用X和Y并将值放入新的txt文件中。
X=$(ssh -i key.txt "$USER"@A.B.C.D "awk -F' ' '{print \$2}' /etc/openvpn/ccd/lastip.txt | awk -F'.' '{print \$4+4}'")
Y=$(ssh -i key.txt "$USER"@A.B.C.D "awk -F' ' '{print \$3}' /etc/openvpn/ccd/lastip.txt | awk -F'.' '{print \$4+4}'")
Z=$(ssh -i key.txt "$USER"@A.B.C.D "touch $NAME.txt | chmod 700 $NAME.txt mv $NAME.txt /etc/openvpn/ccd | echo -n "$X $Y" > /etc/openvpn/ccd/$NAME.txt")
我不断收到消息说拒绝许可:
mv: bash: /etc/openvpn/ccd/almost.txt: Permission denied
cannot move `almost.txt' to `/etc/openvpn/ccd/almost.txt': Permission denied
目录存在,并且对它的权限很好。我如何才能将$ NAME.txt移动到我想要的目录中?
编辑:即使没有Z = $()并使用命令行,我仍然会获得权限被拒绝错误
答案 0 :(得分:2)
这一点需要做一些工作:
touch $NAME.txt | chmod 700 $NAME.txt mv $NAME.txt /etc/openvpn/ccd | echo -n "$X $Y" > /etc/openvpn/ccd/$NAME.txt
至少,您需要用分号和其中一个空格替换管道:
touch $NAME.txt; chmod 700 $NAME.txt; mv $NAME.txt /etc/openvpn/ccd; echo -n "$X $Y" > /etc/openvpn/ccd/$NAME.txt
您想要执行$NAME.txt
看起来似乎不合理;你不应该使用700但600权限。
由于您在mv
之前没有分号,chmod
程序尝试第二次更改文件mv
,$NAME.txt
的权限,{{1} 1}}。
除非您以/etc/openvpn/ccd
身份运行,否则您无法写入root
。但是,您还没有向我们展示当前目录的权限,但是由于/etc/openvpn/ccd
似乎有效,您可以写入。在我写这篇文章的时候,也没有touch
给出的权限 - 但见下文。
并且,正如注释中的John Kugleman注释,在我解剖的命令字符串位于一组双引号内的较大上下文中,/etc/openvpn/ccd
周围的双引号应使用反斜杠进行转义:< / p>
"$X $Y"
鉴于Z=$(ssh -i key.txt "$USER"@A.B.C.D "touch $NAME.txt; chmod 700 $NAME.txt; mv $NAME.txt /etc/openvpn/ccd; echo -n \"$X $Y\" > /etc/openvpn/ccd/$NAME.txt")
上的权限是:
/etc/openvpn/ccd
我们可以推断您没有以drwxr-xr-x 2 root root 4096 2013-01-16 15:01 /etc/openvpn/ccd
身份运行,并且不允许在目录中写入。您可能需要获得在目标计算机上使用root
的权限。