是否有一种优雅的方法来控制“install -D”创建的目录的权限?

时间:2013-04-05 11:27:35

标签: makefile

我在Makefile中使用[/usr/bin/]install将一些二进制文件复制到我的$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手动修复权限。
  3. 第一个解决方案的主要缺点是我有一个目录结构,我必须亲自去旅行和创建。

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

1 个答案:

答案 0 :(得分:0)

仅对install进行一次调用似乎无法实现您想要实现的目标,因此您可能不得不求助于mkdirinstall的组合。根据您的具体情况,您可以利用canned recipe,使用以下内容:

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

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

如果您计划使用make v3.81或更早版本的罐装食谱,请务必阅读Why GNU Make canned recipe doesn't work?的答案