2014-01-15 31 views
0

對於我的一個項目,我使用Makefile來執行一些任務。但由於某種原因,系統沒有捕獲我的輸入,或者我可能做錯了什麼。這裏是我的代碼:CENTOS - Linux - Make - Makefile(獲取用戶輸入不工作)

@read -e -p "Please enter email-addresses: " -i "[email protected],[email protected]" EMAIL_ADDRESSES 
@echo $EMAIL_ADDRESSES; 
@echo $$EMAIL_ADDRESSES; 
@echo ${EMAIL_ADDRESSES}; 
@echo $${EMAIL_ADDRESSES}; 

但這裏是我的輸出:

MAIL_ADDRESSES 
[Blank] 
[Blank] 
[Blank] 

我在做什麼錯?我該如何解決?

回答

2

首先,使其始終在/bin/sh而不是/bin/bash運行它的食譜。您在此處使用的一些功能read僅適用於Bash,並不適用於標準POSIX shell。

其次,make使不同shell中的配方中的每條單獨行都運行。因此,當shell退出並且在下一行中不可用時,在一行中設置的任何shell變量都會丟失。如果您想保留它們,你需要把整個腳本在單個(邏輯)線,像這樣:

@printf 'Please enter email-addresses: '; \ 
    read EMAIL_ADDRESSES; \ 
    echo $$EMAIL_ADDRESSES 

如果你真的想使用bash特性你應該直接調用它。

最後,使用makefile中的標準輸入通常是一個壞主意。如果有人想要在啓用並行作業的情況下運行makefile,那麼除了一個命令外,其他所有命令都不會有任何標準輸入(它將從/dev/null重定向)。最好讓用戶在命令行上提供值作爲變量賦值。

+0

太棒了!添加; \做了詭計! :d – roosevelt