Sử dụng debconf để nhận các mảng có độ dài tùy ý của các giá trị người dùng


-1

Tôi đang xây dựng một số tệp gói gỡ lỗi và tôi đã gặp một số trường hợp trong đó tôi muốn nhận một hoặc nhiều giá trị chuỗi tùy ý (nghĩa là KHÔNG đa lựa chọn) từ người dùng. Hiện tại tôi thấy không có cách nào để làm điều này, và tôi tự hỏi nếu nó có thể.

Một ví dụ sẽ là trong việc thiết lập một nhóm người dùng quản trị cho một máy. Trong trường hợp này, tôi có thể hỏi:

$ Please add a user:
$ 
$ username: someuser
$ password:
$ password set successfully
$ 
$ User "someuser" successfully added. Would you like to add another? [y,n]: y
$
$ username: notheruser
$ password: 
$ password set successfully
$
$ Use "notheruser" successfully added.....

Có lẽ điều này sẽ mang lại một mảng cho người dùng và một mảng phù hợp cho mật khẩu. (Lưu ý: ví dụ hơi khó hiểu, vì vậy tôi không quan tâm đến các cuộc thảo luận về việc liệu trường hợp sử dụng cụ thể này có phải là một ý tưởng hay không.)

Có một số quy ước cộng đồng để giải quyết điều này? Có một giải pháp confmodule tôi không biết về?


@someone cảm ơn vì downvote ẩn danh mà không có bình luận ....
kael

Câu trả lời:


0

Ok, dường như không có cách nào tốt để làm điều này. Tôi đang gửi câu trả lời này (mặc dù không chấp nhận nó) như một giải pháp khả thi, và một giải pháp mà tôi có thể sẽ sử dụng trong thời gian ngắn.

Bạn có thể thu thập các câu trả lời mảng đơn giản dưới dạng danh sách được phân tách bằng dấu cách và sau đó chỉ cần phân tích chúng thành các mảng bash như thế này:

$ read ANS
$ these are four values
$ ANS=($ANS)
$ for a in "${ANS[@]}" do
$     echo "Answer: $a"
$ done
$ 
$ # Outputs:
$ #
$ # Answer: these
$ # Answer: are
$ # Answer: four
$ # Answer: values

Rõ ràng nếu bạn cần làm bất cứ điều gì phức tạp hơn thế này, bạn sẽ bị lừa. Nếu bạn muốn chấp nhận các giá trị có khoảng trắng trong chúng, bạn có thể yêu cầu người dùng trích dẫn giá trị của chúng và sau đó sử dụng evalgiá trị đến để biến nó thành một mảng:

$ read ANS
$ these are 'four or five' values
$ eval "ANS=($ANS)"
$ for a in "${ANS[@]}" do
$     echo "Answer: $a"
$ done
$ 
$ # Outputs:
$ #
$ # Answer: these
$ # Answer: are
$ # Answer: four or five
$ # Answer: values

Một lần nữa, không lý tưởng, nhưng đó là những gì tôi đã có cho đến nay.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.