Bash自动完成用户输入,Makefile

问题描述 投票:0回答:2

我想设置一个makefile,该文件通过Bash自动完成功能读取用户输入,并在此基础上创建一个目录,在该目录中可以复制一些文件。基本上像

$ make initializeProject
Enter destination: Dir<ectory>/Sub<directory>/ProjectDirectory

mkdir: created directory 'Directory/Subdirectory/ProjectDirectory'
'Templates/TemplateFile' -> 'Directory/Subdirectory/ProjectDirectory/TemplateFile'

[< X >代表自动完成的零件。

到目前为止,我的makefile不会自动完成,看起来像这样:

initProjectLaTeX:
        @read -p "Enter destination: " destination; \
        mkdir -pv $$destination; \
        cp -iv ~/.templates/latex/* $$destination

我尝试过this选项,但是会产生错误/bin/sh: 1: read: Illegal option -e。如何在此处访问Bash自动补全功能?

bash makefile
2个回答
0
投票

make使用/bin/sh作为默认外壳,在许多系统上,它与bash不同(例如,在Debian上为dash)。我怀疑dash-e选项是read扩展名,这就是为什么出现错误的原因:

bash

/bin/sh: 1: read: Illegal option -e 设置为/bin/bash中的SHELL应该起作用:

Makefile

Makefile

示例

SHELL := /bin/bash

initProjectLaTeX:
    @read -e -p "Enter destination: " destination; \
    mkdir -pv $$destination; \
    cp -iv ~/tmp/*c $$destination

完成

$ make initProjectLaTeX
Enter destination: foo/bar/baz
mkdir: created directory 'foo'
mkdir: created directory 'foo/bar'
mkdir: created directory 'foo/bar/baz'
'/home/marco/tmp/foo.c' -> 'foo/bar/baz/foo.c'
$ tree foo
foo
└── bar
    └── baz
        └── foo.c

2 directories, 1 file
$

0
投票

不是让$ make initProjectLaTeX Enter destination: foo foo/ foo.c Enter destination: foo foo/ foo.c Enter destination: foo 与用户互动,而是将所需的目的地传递给make

以修改后的配方开始:

make

然后运行

initProjectLaTeX:
        mkdir -pn $(DESTINATION)
        cp -iv ~/.templates/latex/* $(DESTINATION)

([make initProjectLaTeX DESTINATION=Dir<ectory>/Sub<directory>/ProjectDirectory 允许完成分配的值。)

© www.soinside.com 2019 - 2024. All rights reserved.