2010-09-18 42 views
15

Tôi có đoạn mã sau bên trong một Makefile:Makefile - Tại sao lệnh đọc không đọc đầu vào của người dùng?

# Root Path 
echo "What is the root directory of your webserver? Eg. ~/Server/htdocs" ; 
read root_path ; 
echo $root_path ; 
if [ ! -d $root_path ] ; then \ 
    echo "Error: Could not find that location!" ; exit 1 ; \ 
fi 

Tuy nhiên khi gõ bất cứ điều gì (. Ví dụ: "asd") đây là những gì được trả về:

What is the root directory of your webserver? Eg. ~/Server/htdocs 

asd 
oot_path 
Error: Could not find that location! 

Khi những gì tôi mong đợi để xem sẽ be:

What is the root directory of your webserver? Eg. ~/Server/htdocs 

asd 
asd 
Error: Could not find that location! 

Làm cách nào để khắc phục sự cố này ???

+0

Bỏ phiếu cho câu hỏi này bởi vì tôi cho rằng nó có thể xuất hiện nhiều lần, nhưng xem Greg, John và Daenyth nói gì về việc thực hiện việc này: * kẻ giết người rìu tiếp theo duy trì mã của bạn sẽ ** không ** thích nó. * – dmckee

Trả lời

19

Vấn đề trước mắt là Tự làm cho diễn giải $ khác với trình bao. Hãy thử:

echo "What is the root directory of your webserver? Eg. ~/Server/htdocs"; \ 
    read root_path; \ 
    echo $$root_path 

Các đôi $$ thoát khỏi sự $ cho Make, vì vậy nó vượt qua đơn $ qua để vỏ. Cũng lưu ý rằng bạn sẽ cần phải sử dụng liên tục dòng \ để toàn bộ chuỗi được thực thi dưới dạng một tập lệnh shell, nếu không thì Make sẽ sinh ra một vỏ mới cho mỗi dòng. Điều đó có nghĩa là bất cứ điều gì bạn read sẽ biến mất ngay sau khi thoát vỏ.

Tôi cũng nói rằng nói chung, việc nhắc đầu vào tương tác từ Makefile là không phổ biến. Bạn có thể sử dụng công tắc dòng lệnh tốt hơn để chỉ ra thư mục gốc của máy chủ web.

+4

Thứ hai ý tưởng "nhắc đầu vào tương tác là không phổ biến". Bạn không muốn phải trả lời lời nhắc mỗi khi bạn gõ 'make'. –

+1

Tôi s/uncommon/a abomination /. Đó là những gì 'cấu hình' kịch bản và làm cho các biến được cho – Daenyth

+0

Cảm ơn! Tôi luôn nghĩ Makefiles chỉ là các kịch bản shell được tôn vinh, nhưng điều này chắc chắn cho thấy nếu không. Chắc chắn sẽ phải xem xét lại các trường hợp sử dụng của tôi với họ. @ Damenyth, bạn có ý gì khi định cấu hình tập lệnh? Họ có gì đặc biệt không ??? – balupton

Các vấn đề liên quan