1

他,
我想将文件(包含相对文件路径)的内容读取到变量中,并在文件中的每一行前加上路径。然后将所有这些文件复制到一个目录。像这样:

$(httpd_DIR)/my.tar: $(mypath)/html.txt
    rm -rf web
    mkdir -p web
    VV = $(addprefix $(httpd_DIR)/, $(shell cat $(mypath)/html.txt) )
    cp -R $$VV $(httpd_DIR)/web
    $(TAR) -C $(httpd_DIR) -cvf $(httpd_DIR)/web.tar web


$(mypath)/html.txt 文件包含一个相对文件路径列表,如下所示:
dir1/
file1.html dir2/file2.html
dir3/file3.html

出于某种原因,我收到以下错误:
/bin/bash: VV : 找不到相关命令

我没有尝试执行 VV,那么为什么他会给我这个错误?
请注意,如果我取消注释 cp 命令,我仍然会收到相同的错误...我在 linux PC 上使用 GNU make。

4

1 回答 1

2

你在这里有几个问题。

VV = $(addprefix $(httpd_DIR)/, $(shell cat $(mypath)/html.txt) )

您还没有告诉我们您使用的是什么外壳,所以我假设是 bash。

如果你想在 bash 中分配一个变量,你必须注意空格:VV=foo是合法的并且会做你期望的,但是如果你输入VV = foo,shell 会将第一个单词“VV”解释为一个命令,然后拒绝。如果您键入VV=foo bar,shell 将分配fooVV,然后拒绝命令bar。你可以VV="foo bar"改用。

然后你遇到另一个问题。每个命令都在其自己的子 shell 中运行,因此在一个命令中分配的变量不会在下一个命令中继续存在:

VV=foo
echo $$VV # this will echo a blank

您必须组合命令,如下所示:

VV=foo ; echo $$VV # this will echo foo

或这个:

VV=foo ; \
  echo $$VV # this will echo foo

(请注意,第一行之前只有一个 TAB。)

一般来说,在插入真正的命令之前,您应该使用您能想到的最简单的命令来测试这些结构。这样就更容易捕获这些错误。

于 2012-12-13T14:44:53.793 回答