gpt4 book ai didi

bash - 如何让 `make` 提示用户输入密码并将其存储在 Makefile 变量中?

转载 作者:行者123 更新时间:2023-11-29 08:49:04 37 4
gpt4 key购买 nike

我正在编写 Makefile,Makefile 运行的一些命令需要密码。我想让用户能够使用 make PASSWORD=password 将它作为 Makefile 变量传递,或者如果用户不传递它,则提示用户输入它并存储他们的所述 Makefile 变量中的响应。

目前,我可以检查 Makefile 变量,然后作为我的目标特定规则的一部分,编写提示用户输入密码的 shell 命令并将其存储在 shell 变量中。但是,此变量仅适用于该特定 shell 而不是任何其他 shell。

如何从用户那里读取内容并将其存储在变量中?

我试过以下方法:

PASSWORD ?= $(shell read -s -p "Password: " pwd; echo $pwd)

但从未打印提示。我也试过 echo "Password: " inside shell,但也没有打印出来。

有什么想法吗?

编辑:

为了澄清,需要为特定目标设置密码,所以我有这样的东西:

PASSWORD := 

my-target: PASSWORD ?= $(shell read -s -p "Password: " pwd; echo $$pwd)

my-target:
# rules for mytarget that use $(PASSWORD)

编辑 2:

我发现了问题。当我在脚本顶部设置 PASSWORD := 时,它会将 PASSWORD 设置为空字符串,这反过来会导致 ?=将被跳过(因为 PASSWORD)已经设置。

最佳答案

一些事情:

  • 用于取消引用 shell 变量 pwd$ 正在由 make 解释。您可以使用 $$
  • 将其从 make 中转义
  • make 将 shell 调用为与 Posix 兼容的 /bin/sh 而不是 /bin/bash。因此,不支持 read-s 选项。

试试这个:

PASSWORD ?= $(shell bash -c 'read -s -p "Password: " pwd; echo $$pwd')

这对我适用于 Ubuntu 12.04/GNU make 3.81/bash 4.2.25(1)

在 OSX 10.8.5/make 3.81/bash 3.2.48(1) 上:

$ cat Makefile PASSWORD ?= $(shell bash -c 'read -s -p "Password: " pwd; echo $$pwd')all:    echo The password is $(PASSWORD)$ makePassword: echo The password is 1234The password is 1234$ 

Update - @user5321531 pointed out that we can use POSIX sh instead of bash, and temporarily suppress echo with stty:

PASSWORD ?= $(shell stty -echo; read -p "Password: " pwd; stty echo; echo $$pwd)

关于bash - 如何让 `make` 提示用户输入密码并将其存储在 Makefile 变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20671511/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com