繁体   English   中英

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

[英]Bash script: Unable to move a file to another directory

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

这一点需要一些工作:

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看起来似乎$NAME.txt ; 你不应该使用700但600权限。

由于你在mv之前没有分号, chmod程序试图再次更改文件mv$NAME.txt/etc/openvpn/ccd权限。

除非您以root身份运行,否则您无法在/etc/openvpn/ccd写入。 但是,您还没有向我们展示当前目录的权限,但由于touch似乎有效,您可以写入。 在我写这篇文章的时候,也没有给出/etc/openvpn/ccd的权限 - 但见下文。


并且,正如John Kugleman在评论中指出的那样,在我解剖的命令字符串在一组双引号内的较大上下文中, "$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身份运行,也不允许在目录中写入。 您可能需要获得在目标计算机上使用sudo权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM