Thêm GUI đơn giản vào tập lệnh shell Linux bằng kdialog

theanh

Administrator
Nhân viên
Shell script là những thứ cực kỳ hữu ích. Chúng cho phép bạn làm những việc cơ bản như tạo một lệnh dễ dàng để thay thế một lệnh khó hơn bằng nhiều cờ, cho đến việc gom nhiều lệnh phức tạp để chạy từ một công việc cron. Chúng tuyệt vời vì bạn có thể nhanh chóng kích hoạt chúng trong terminal yêu thích của mình, nhưng trong một số trường hợp, chúng yêu cầu bạn phải nhớ các tổ hợp cờ hoặc tùy chọn cụ thể. Nếu bạn thấy mình trong tình huống này, bạn có thể thêm một số hộp thoại GUI đơn giản để giúp bạn thực hiện nhiệm vụ nhanh hơn.

Để sử dụng hướng dẫn này, bạn sẽ cần những thứ sau:

  • Truy cập vào shell giống Unix (phần này được viết với bash).

  • Hệ điều hành macOS và *nix (như Linux) sẽ đi kèm với phần này hoặc phần tương tự.

  • Trên Windows, bạn có thể cài đặt môi trường CygWin hoặc trên các phiên bản Windows 10 gần đây, hãy sử dụng "Hệ thống con Windows dành cho Linux"

  • Các thư viện cơ sở đối với môi trường máy tính để bàn KDE. Bạn không cần toàn bộ, đặc biệt là nếu bạn đã cài đặt một DE khác.
Chỉ cần cài đặt kdialog nếu bạn bắt đầu với một môi trường máy tính để bàn khác với KDE và bạn không có ứng dụng KDE nào khác trên máy của mình. Nó là một phần của gói kde-baseapps-bin trên Ubuntu, nghĩa là nó được cài đặt theo mặc định trên Kubuntu. Trên các phiên bản phái sinh khác, bạn có thể cài đặt nó bằng lệnh sau tại thiết bị đầu cuối:

Cài đặt kdialog từ thiết bị đầu cuối.
Mã:
sudo apt-get install kde-baseapps-bin
Điều này có thể dẫn đến một quá trình cài đặt đáng kể, vì các thư viện và gói KDE khác sẽ được cài đặt cùng với nó. Nhưng này, dung lượng ổ cứng rẻ mà, đúng không?

Vì các tập lệnh (nói chung) được cho là sẽ tự động thực hiện mọi thứ, nên chúng ta chỉ cần hiển thị hộp thoại này trong các tình huống sau:

  • Nếu chúng ta cần thu thập một số loại thông tin đầu vào từ người dùng hoặc;

  • Nếu chúng ta muốn hiển thị cho người dùng một số loại phản hồi theo cách đáng chú ý (tức là không chỉ là một số văn bản được đưa ra trên dòng lệnh).
Hãy lấy ví dụ về việc sử dụng lệnh để [sao lưu trang web Drupal của bạn bằng drush]. Tất nhiên, vì bạn là một doanh nhân Internet mới vào nghề, bạn không chỉ có một trang web Drupal—? mà là ba trang web. Bạn không muốn phải chạy các lệnh riêng biệt khi muốn sao lưu tất cả các trang web của mình, nhưng đồng thời bạn không muốn phải nhớ một đường dẫn dài nếu bạn chỉ muốn chụp ảnh nhanh một trang web. Chúng ta có thể sử dụng một vài hộp thoại để tự giúp mình bằng cách:

  • Trình bày cho người dùng danh sách các trang web chúng ta có thể sao lưu và để họ đưa ra lựa chọn, và;

  • Hiển thị cho người dùng thông báo xác nhận kết quả, cho dù thành công hay thất bại.
kDialog hoạt động bằng cách gọi nó tại dòng lệnh cùng với kiểu hộp thoại, bất kỳ tham số nào mà kiểu đó có thể yêu cầu và bất kỳ tùy chọn nào khác như tiêu đề hộp thoại.

Có nhiều loại hộp thoại khác nhau để lựa chọn tùy thuộc vào nhu cầu của bạn, như sau:
Dialog TypeSample ImageDescription

Information Message Boxes
Hộp thoại Lựa chọn tệp
Hộp thoại tiến trình
KDialog Types
Hiển thị hộp có nút "OK" để đóng, cung cấp tin nhắn văn bản và biểu tượng thông tin "không quan trọng", cảnh báo hoặc lỗi.

Passive Pop-up
[TD][/TD][TD][/TD]
Hiển thị thông báo sẽ biến mất trong vài giây, tức là không yêu cầu người dùng đóng hoặc bỏ qua.

Hộp thông báo Có/Không
[TD][/TD][TD][/TD]
Giống như "Hộp thông báo thông tin", hộp thoại này sẽ hiển thị một hộp thoại có biểu tượng thông tin/cảnh báo/lỗi, hộp thoại này cũng sẽ cung cấp cho người dùng lựa chọn "Có" hoặc "Không".

Hộp thoại nhập
[TD][/TD][TD][/TD]
Hộp này cung cấp một hộp duy nhất mà người dùng có thể nhập một số văn bản vào đó.

Hộp hiển thị tệp
[TD][/TD][TD][/TD]
Hộp này sẽ hiển thị nội dung của tệp (văn bản thuần túy) trong hộp thoại.

Hộp thoại Menu và Lựa chọn
[TD][/TD][TD][/TD]
Hộp thoại này cung cấp hộp thoại có danh sách các mục, cho phép người dùng thực hiện một hoặc nhiều lựa chọn:

  • Hộp thoại Menu và Radiolist cho phép lựa chọn một tùy chọn.

  • Hộp thoại Checklist cho phép lựa chọn một, nhiều hoặc tất cả các tùy chọn.

  • Hộp thoại Combobox cho phép lựa chọn một tùy chọn bằng menu thả xuống.

Người dùng có thể chọn một phần của hệ thống tệp, bao gồm:

  • Chọn các tệp hiện có, với khả năng lọc theo tên hoặc filetype

  • Nhập một tệp mới hoặc một tệp mới để lưu/cập nhật

  • Thư mục

Người dùng có thể kết hợp kDialog với lệnh dcop để tạo hộp thoại cập nhật cho người dùng về tiến trình của một hoạt động.
Khi xem xét các tùy chọn trên, có hai tùy chọn nổi bật có tiềm năng:

  • "Hộp thoại danh sách kiểm tra" sẽ cho phép chúng ta chọn một hoặc tất cả các trang web của mình để sao lưu.

  • "Hộp thông báo thông tin" có thể được sử dụng để hiển thị xem từng trang web này đã thành công hay thất bại.
Với các tùy chọn này, chúng ta có thể tưởng tượng tập lệnh của mình trông giống như điều này:
Mã:
SITE1 nằm Ở ĐÂY (tạo đường dẫn đầy đủ, không phải đường dẫn tương đối)SITE2 nằm Ở ĐÓSITE3 nằm Ở NƠI KHÁChiển thị kDialog với SITE1, SITE2 và SITE3 làm tùy chọn và cho tôi biết người dùng chọn cái nàovới mỗi tùy chọn người dùng đã chọn: chạy +drush ard+ trên trang web đó và ghi lại xem nó có thành công hay không.hiển thị +kDialog+ khác với mỗi kết quả đó.
Với suy nghĩ đó, chúng ta hãy bắt đầu ngay.

Điều đầu tiên chúng ta nên làm là lắp ráp lệnh drush mà chúng ta muốn áp dụng cho từng trang web khi nó được chọn. Giả sử tất cả các trang web đều nằm trên cùng một máy chủ web trong các thư mục khác nhau, nhưng chúng ta muốn lưu trữ các bản sao lưu trong một thư mục "sao lưu" chung. Chúng ta có thể sử dụng lệnh sau:
Mã:
cd SITEdrush ard --destination=/home/user/backup/SITENAME.tar.gz
Vì vậy, sử dụng kiến thức của bạn về thiết lập biến và vòng lặp for, chúng ta có thể tạo tập lệnh này như sau:
Mã:
#! /bin/bash// Lưu ý: tạo biến để giữ đường dẫn đến tất cả các trangPERSONALSITE='/home/www/mypersonalsite/'BUSINESSSITE='/home/www/mybusinesssite/'HOBBYSITE='/home/www/myhobbysite/'// Lưu ý: tạo biến để giữ đường dẫn đến đíchDESTINATION='/home/user/backup'// Lưu ý: hiển thị hộp thoại yêu cầu người dùng chọn trang nào để sao lưuCHOICES=$(kdialog --checklist "Chọn trang để sao lưu:" 1 "Trang cá nhân" tắt 2 "Trang doanh nghiệp" tắt 3 "Trang sở thích" tắt)// Lưu ý: ghi lại thông báo thành công/thất bại cho mỗi lựa chọn được trả về từ hộp thoạicho mỗi lựa chọn trong $CHOICESdo case { 1) cd $PERSONALSITE drush ard --destination=$DESTINATION/mypersonalsite.tar.gz if [$?=="0"] then RESULTS += "Sao lưu trang web cá nhân: Thành công\n" else RESULTS += "Sao lưu trang web cá nhân: Thất bại\n" fi 2) cd $BUSINESSSITE drush ard --destination=$DESTINATION/mybusinesssite.tar.gz if [$?=="0"] then RESULTS += "Sao lưu trang web doanh nghiệp: Thành công\n" else RESULTS += "Sao lưu trang web doanh nghiệp: Thất bại\n" fi 3) cd $HOBBYSITE drush ard --destination=$DESTINATION/myhobbysite.tar.gz if [$?=="0"] then RESULTS += "Sao lưu trang web doanh nghiệp: Thành công\n" else RESULTS += "Sao lưu trang web doanh nghiệp: Thất bại\n" fi esac// LƯU Ý: hiển thị hộp thoại với kết quả của tất cả các hoạt động sao lưu.kdialog --msgbox $RESULTS
Nếu chúng ta lưu lệnh này và thực hiện lệnh như mô tả trong bài viết đầu tiên trong loạt bài về Bash, chúng ta sẽ có thể chạy một lệnh duy nhất, có hộp thoại dễ sử dụng để chọn trang web của mình, sau đó thấy một cửa sổ đẹp báo cáo lại mọi thứ đã diễn ra như thế nào.

Mặc dù tập lệnh này chắc chắn có thể được tối ưu hóa theo một số cách, nhưng nó chứng minh cách bạn có thể sử dụng kdialog để thu thập một số dữ liệu đầu vào của người dùng và hiển thị một số kết quả bằng cách chạy một chương trình duy nhất trong tập lệnh của mình.
 
Back
Bên trên