尽管+x,但运行脚本的权限被拒绝

尽管+x,但运行脚本的权限被拒绝

脚本位于 exec 分区(在 /home/~~~ 下)并具有 +x 标志(-rwxr-xr-x )。

在 bash shell 上可执行(不带脚本),但不能在脚本上执行。脚本非常简单。

#!/bin/bash

data=cat $PWD/.git/config | awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}'
echo data : $data

结果 :

/home001/myaccount/uploader.sh: line 3: /home001/myaccount/mydirectory/.git/config: Permission denied

目标文件的权限是象征性的,777,如下所示。

lrwxrwxrwx

但可执行且在 bash 命令行下运行良好。

myaccount@myserver:~/mydirectory$ cat $PWD/.git/config|awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}'
mybranch

脚本具有 +x 标志并且位于可执行分区上。也可以在没有脚本的情况下执行,但不能在脚本上执行。为什么?

答案1

问题出在这一行:

data=cat $PWD/.git/config

这会暂时将 shell 变量设置data为具有该值cat,然后尝试执行该文件$PWD/.git/config。这很不幸,因为您可能不想执行它。

您可能打算:

data=$(cat $PWD/.git/config | awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}')

上面将运行您的cat命令,将其输出发送到awk并将 awk 的输出保存在变量 中data。如果这就是你想要的,那么这cat是多余的。将上面的内容替换为:

data=$(awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}' $PWD/.git/config)

解释错误消息

/home001/myaccount/uploader.sh: line 3: /home001/myaccount/mydirectory/.git/config: Permission denied

从上面我们知道正在uploader.sh执行。这说明权限没有问题uploader.sh。错误发生在第3行,其中uploader.sh命令为:

data=cat $PWD/.git/config | awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}'

Permission deniedshell 尝试执行此行时发生错误。

相关内容