2013-05-31 21 views
5

Tôi đang xây dựng một bootstrap cho một dự án github và muốn nó là một lớp lót đơn giản. Tập lệnh yêu cầu nhập mật khẩu.đọc bash đang bị bỏ qua khi chạy từ ống cong

này hoạt động và dừng lại kịch bản để chờ đợi cho một đầu vào:

curl -s https://raw.github.com/willfarrell/.vhosts/master/setup.sh -o setup.sh 
bash setup.sh 

này không, và chỉ cần bỏ qua so với yêu cầu đầu vào:

curl -s https://raw.github.com/willfarrell/.vhosts/master/setup.sh | bash 

setup.sh chứa mã là cái gì đó như :

# code before 
read -p "Password:" -s password 
# code after 

Có thể có một lớp lót sạch không? Nếu vậy, làm thế nào người ta có thể làm điều đó?

Cách giải quyết:

Sử dụng ba lệnh thay vì sản lượng đường ống.

curl -s https://raw.github.com/willfarrell/.vhosts/master/setup.sh -o vhosts.sh && bash vhosts.sh && rm vhosts.sh

Trả lời

4

Với các đường ống, các read đọc từ đầu vào tiêu chuẩn (ống), nhưng vỏ đã đọc tất cả các đầu vào tiêu chuẩn do đó không phải là bất cứ điều gì cho read để đọc.

+0

Có cách giải quyết nào để ghi lại đầu vào của người dùng khi sử dụng đường ống không? –

+0

Nếu bạn chắc chắn có một con người ở đó, hãy đọc từ '/ dev/tty'? –

+0

Tôi sẽ xem xét điều đó. cảm ơn. –