0

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

4

1 回答 1

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并且/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在目标机器上使用的权限。

于 2013-01-29T02:27:39.117 回答