脚本位于 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 denied
shell 尝试执行此行时发生错误。