[英]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.