linux - 所有者无法在具有所有权限Linux的文件夹中创建文件
问题描述
我正在尝试使用脚本在文件夹下创建几个文件,但无法创建。以下是创建某些文件的文件夹权限
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 的回显语句也不会显示,有什么方法可以查看它。
如果我们在 shell 提示符而不是脚本中执行相同的命令,这些命令将起作用并获得所需的输出;即创建文件夹,其中包含所有文件。
如果我们使用 root 用户运行它,同样的脚本也可以工作。
我相信这应该适用于 Linux 风格,在这种情况下,我使用的是 CentOS
请帮我解决这个问题,如果我遗漏了任何细节,请告诉我。
谢谢
解决方案
这一行:
"${MKDIR_CMD}"
不管用。它将整个值$MKDIR_COMMAND
视为要运行的程序的名称,它不会将其拆分为程序和参数,因为您在它周围加上了引号。此外,扩展变量时不会处理重定向。
您需要使用eval
重新解析字符串:
eval "$MKDIR_CMD"
你有同样的问题:
"/createFiles.sh \"${PATH_TO_WRITE}\""
这应该是:
/createFiles.sh "$PATH_TO_WRITE"
这些问题不依赖于权限,我怀疑脚本在以 root 身份运行时是否真的有效。
这是一个相关问题,展示了如何在变量中最好地存储命令参数:
但是,如果您还存储 shell 运算符(如重定向),则那里的解决方案(使用数组而不是字符串)将不起作用。
推荐阅读
- android - 其他用户如何不使用 C++ 库?
- c++ - 新连接发送数据后epoll没有通知EPOLLIN事件?
- android - 持卡人验证方法 (CVM) - 来自 APDU 命令的 9F34 标签 - Android
- javascript - 如何从 document.getElementById .setAttribute href 添加按钮或将长 url 更改为其他名称
- php - 如何将动态限制传递给 Phalcon 中的 ORM 实例?
- r - 将两个邻接矩阵逐元素相乘,一个比另一个大
- ruby - 将对象属性传递给Ruby类中的函数调用
- google-app-maker - 数据截断:根据需要标记字段时无效使用 NULL 值
- view - 从 sp 传递参数到视图
- node.js - 全局安装节点模块