Sto tentando di richiedere l'input dell'utente, ma ho problemi a ottenere il prompt read -p
che viene stampato come previsto quando viene eseguito da un Makefile o una subshell avviata da un Makefile. Qui sono i miei tentativi di raggiungere questo senza successo:non viene stampato correttamente quando viene eseguito in Makefile
test1:
@echo '>> before input <<'; \
read -p 'type something:' FOO; \
echo '>> after input <<'; \
echo $$FOO
L'output è simile al seguente supponendo che in ingresso asdf
. Il mio ingresso viene stampato mentre sto scrivendo, ma la richiesta type something:
viene stampato dopo tutto il resto:
$ make
>> before input <<
asdf
>> after input <<
asdf
type something
Un altro modo in cui ho provato sta utilizzando l'interfaccia readline di Bash read -e
:
test2:
@echo '>> before input <<'; \
read -e -p 'type something:' FOO; \
echo '>> after input <<'; \
echo $$FOO
In questo caso l'uscita sembra buono, tuttavia, né il prompt type something:
né l'input effettivo durante la digitazione vengono stampati fino a dopo aver premuto ENTER
, il che è piuttosto scomodo quando si richiede l'input.
Ho anche provato a stampare il prompt prima con echo
:
test3:
@echo '>> before input <<'; \
echo 'input something:';\
read FOO; \
echo '>> after input <<'; \
echo $$FOO;\
E il mio output è quasi buona, ma l'ingresso è stampato su una nuova riga:
$ make
>> before input <<
input something:
asdf
>> after input <<
asdf
Un ritocco finale utilizzando printf
a evitare la nuova riga:
test4:
@echo '>> before input <<'; \
printf 'input something: ';\
read FOO; \
printf '\n'; \
echo '>> after input <<'; \
echo $$FOO;\
E sembra read
corrode la richiesta, se non si conclude con \n
:
$ make
>> before input <<
asdf
input something:
>> after input <<
asdf
E, naturalmente, lo stesso succede se semplicemente chiamare uno script:
test5:
./script.sh
In caso aiuta individuazione della problema: OS X 10.10.3/make 3.81/bash 3.2.57 (1).
Disclaimer: So che non è una buona idea avere Makefile dipendenti dall'input dell'utente, ma ho bisogno di questo per un caso molto particolare.
Prima di tutto, si desidera questo comportamento per target Makefile, a quanto ho capito, non a livello globale per Makefile. –
Ho provato a eseguire test1 sul mio Mac, che ha le stesse versioni delle applicazioni utilizzate. L'output che ottengo è: 'bash-3.2 $ rendono test1 >> prima dell'ingresso << Scrivi qualcosa: TEST >> dopo ingresso << TESTING' Il che mi porta a credere che abbiamo bisogno di più informazioni per risolvere il problema. Hai apportato modifiche al comportamento di bash o make? – Ashlaban
Penso che tu sia su qualcosa qui, @Ashlaban. Commentando il mio '.zshrc', la lettura si comporta come previsto in tutti i casi. Indagherò su quello che ho dentro che sta causando questo strano problema. – OmeGak