1

[/usr/bin/]install在 Makefile 中使用将一些二进制文件复制到我的$HOME目录中。我的umask设置为700。

问题是我install -D -m 700用来安装二进制文件,并且父目录是使用 755 而不是 700 的权限创建的:

$ umask
077
$ ls
$ touch hello
$ ls -l
total 0
-rw------- 1 emuso emuso 0 Apr  5 13:15 hello
$ install -D -m 700 hello $PWD/this/is/hello
$ ls -ld this
drwxr-xr-x 3 emuso emuso 4096 Apr  5 13:17 this
$ ls -lR this 
this:
total 4
drwxr-xr-x 2 emuso emuso 4096 Apr  5 13:17 is

this/is:
total 0
-rwx------ 1 emuso emuso 0 Apr  5 13:17 hello

我想要目录thisis获得700而不是755的权限。

我想到的解决方案是:

  1. 用于install -d -m 700手动创建目录结构。
  2. 用于chmod手动修复权限。

第一个解决方案的主要缺点是我有一个目录结构,我必须手动创建和创建。

所以我的问题是:有没有一种优雅的方法来控制“install -D”创建的目录的权限?

4

1 回答 1

0

您想要实现的目标似乎无法通过一次调用来实现install,因此您可能不得不求助于mkdirand的组合install。根据您的具体情况,您也许可以利用罐头食谱,使用如下内容:

define einstall
test -d "$(dir $@)" || mkdir -p "$(dir $@)"
install -m 700 $< $@
endef

some/new/test/hello: hello
    $(einstall)

如果您打算使用 make v3.81 或更早版本使用罐头食谱,请务必阅读为什么 GNU Make 罐头食谱不起作用?

于 2013-04-05T17:08:17.703 回答