Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么';chmod命令是否将DIR的内容识别为目录?_Linux_Makefile - Fatal编程技术网

Linux 为什么';chmod命令是否将DIR的内容识别为目录?

Linux 为什么';chmod命令是否将DIR的内容识别为目录?,linux,makefile,Linux,Makefile,我正在尝试编写一个makefile,以便在执行时执行以下操作: CMVC_VIEW = ../../.. TB_DIR = $(CMVC_VIEW)/tarball_images SMAC_TOOLS = $(TB_DIR)/smac_tools SMAC_BIN = $(SMAC_TOOLS)/bin DIR_LIST = $(TB_DIR) \ $(SMAC_TOOLS) \ $(SMAC_BIN) install: rm -f *.o for DI

我正在尝试编写一个makefile,以便在执行时执行以下操作:

CMVC_VIEW = ../../.. 
TB_DIR = $(CMVC_VIEW)/tarball_images 
SMAC_TOOLS = $(TB_DIR)/smac_tools 
SMAC_BIN = $(SMAC_TOOLS)/bin 
DIR_LIST = $(TB_DIR) \
    $(SMAC_TOOLS) \
    $(SMAC_BIN)

install:
    rm -f *.o
    for DIR in $(DIR_LIST); do \
      echo $${DIR}; \
      chmod 2775 $${DIR}; \
    done
但是,当运行makefile时,我得到一个错误,即chmod:2775之后缺少操作数。我不明白为什么会发生这种情况,因为
$${DIR}
应该包含与需要更改其访问权限的目录对应的路径

当我用静态目录路径替换
$${DIR}
时,这似乎起作用


对于这个makefile,假设将
DIR\u LIST
宏分配给一个目录列表,目录列表用空格分隔。

您会被make变量引用和shell变量引用弄糊涂。请记住,make会将任何类似
$(FOO)
的字符串解释为make变量的引用,用该名称查找变量,并用值替换引用。基于shell的
for
循环创建了一个名为DIR的shell变量,但由于您刚刚使用了
$(DIR)
,make试图(但失败)找到名为DIR的make变量


您的解决方案之所以有效,是因为double
$
阻止make执行自己的变量引用解析,因此将literal
$(DIR)
传递给shell,然后shell执行自己的变量解析!当然,这是可行的,因为
for
循环创建了DIR变量。

DIR\u LIST包含什么?紧靠
chmod
语句之前的
echo
语句显示什么?它只是一个目录列表,用空格分隔。例如:/tmp/justin1/tmp/justin2/tmp/justin3这是我问题的一半。您能告诉我们设置目录列表的实际行吗?这段代码是从您的Makefile中逐字剪切粘贴的吗?在示例Makefile中设置
DIR\u LIST
后运行该代码时,该代码看起来很好,工作正常。。TB_DIR=$(CMVC_VIEW)/tarball_images SMAC_TOOLS=$(TB_DIR)/SMAC_TOOLS SMAC_BIN=$(SMAC_TOOLS)/BIN DIR列表=$(TB_DIR)\$(SMAC_TOOLS)\$(SMAC_BIN)` echo语句将显示每个目录,后跟一个换行符。出于某种原因,$${DIR}可以与echo一起使用,但不能与chmod 2775一起使用。