所有者无法使用所有许可权在文件夹中创建文件

时间:2018-12-03 08:14:51

标签: linux shell permissions

我正在尝试使用脚本在文件夹下创建一些文件,但无法这样做。 以下是用于创建某些文件的文件夹特权

su pnaid

部分脚本内容,负责创建文件夹并在其中创建文件

MKDIR_CMD="/bin/mkdir -p \"${PATH_TO_WRITE}\" > /dev/null 2>&1"
"${MKDIR_CMD}"
echo "Checking Dir Path exist"
if [ -d "${PATH_TO_WRITE}" ]; then
   echo "Calling another script to create files under this folder"
   "/createFiles.sh \"${PATH_TO_WRITE}\""
else
   echo "WARNING: unable to create folder"

$(PATH_TO_WRITE)的父文件夹具有以下特权

drwxr-x---.  2 pnaid pnaid  4096 Dec  3 12:31 work_directory

每次显示“警告:无法创建文件夹”语句。

我尝试使用具有777权限的pnaid用户创建一个文件夹,并以脚本而不是“ $ {MKDIR_CMD}”的形式提供该文件夹,在这种情况下,显示语句“在此文件夹下创建另一个脚本来创建文件”,但另一个脚本无法写入此文件夹。

当从原始脚本调用时,createFiles.sh的echo语句也不会显示,是否有任何查看方法。

如果我们在shell提示而不是脚本上执行相同的命令,则这些命令将起作用并获得所需的输出;即创建的文件夹中包含所有文件。

如果以root用户运行该脚本,同样的脚本也可以工作。

我相信这应该适用于Linux风格,在这种情况下,我使用的是CentOS

请帮助我解决此问题,并让我知道是否错过任何细节。

谢谢

1 个答案:

答案 0 :(得分:1)

此行:

"${MKDIR_CMD}"

不起作用。它将$MKDIR_COMMAND的整个值当作要运行的程序的名称,它不会将其拆分为程序和参数,因为您在引号周围加上了引号。此外,扩展变量时不会处理重定向。

您需要使用eval重新解析字符串:

eval "$MKDIR_CMD"

您在以下方面有同样的问题

"/createFiles.sh \"${PATH_TO_WRITE}\""

这应该是:

/createFiles.sh "$PATH_TO_WRITE"

这些问题不取决于权限,我怀疑该脚本在以root用户身份运行时是否真的有效。

这是一个相关的问题,显示了如何在变量中最好地存储命令参数:

Setting an argument with bash

但是,如果您还存储重定向之类的shell运算符,那么那里的解决方案(使用数组而不是字符串)将无法工作。