Bash脚本:无法将文件移动到另一个目录

时间:2013-01-29 02:17:23

标签: bash syntax ssh

我的脚本出现问题。变量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 = $()并使用命令行,我仍然会获得权限被拒绝错误

1 个答案:

答案 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的权限。