Chuyên đề: Dư âm của thời kỳ máy đánh chữ
đã đăng vào 24, Tháng 4, 2025, 14:17Những năm 1960-1980, sử dụng máy tính không giống như bây giờ. Máy tính rất đắt và cồng kềnh. Một máy tính có khả năng phục vụ hàng chục người dùng tại cùng một thời điểm. Người dùng kết nối với máy tính bằng các thiết bị như máy đánh chữ và thiết bị đầu cuối có màn hình (dec vt100, 220) thông qua kết nối tuần tự (serial). Nó cũng giống như bạn sử dụng môi trường dòng lệnh (hay giả lập thiết bị đầu cuối, terminal emulator).
Làm việc như thế này rất bất tiện. Trong các chương trình dòng lệnh hiện nay, nếu bạn nhập sai, bạn có thể dùng các phím mũi tên để quay lại và sửa. Nhưng ngày xưa, việc sửa lại khó hơn nhiều.
Bài tập khởi động: Cài đặt và sử dụng chương trình dòng lệnh dash trong vòng 30 phút. Bài khó hơn: Thay dash làm chương trình dòng lệnh chính cho tài khoản của bạn và sử dụng trong một ngày.
Để giải quyết vấn đề này, người ta tạo ra các thư viện cung cấp
chức năng sửa đổi dòng lệnh' (command-line editing) như readline.
Sửa đổi dòng lệnh' tức là khả năng dịch chuyển con trỏ dòng lệnh
sang trái sang phải bằng các phím như phím mũi tên, và ghi nhớ,
điền câu lệnh đã nhập trước đó vào sau dấu nhắc lệnh để có thể
sửa lệnh. readline được gắn vào các chương trình dòng lệnh.
Việc gắn vào chương trình dòng lệnh là có lý do. Tháo lắp phần cứng để thêm chức năng cho một thiết bị đầu cuối là điều khó khăn và tốn kém. Thêm mã mới vào phần mềm giúp cho tất cả mọi người nhận được thay đổi. Không chỉ vậy, người dùng từ mạng (rlogin) cũng có thể sử dụng các tính năng này. Tất nhiên, chương trình dòng lệnh sẽ nặng hơn và chạy chậm hơn. Các hệ điều hành như Debian và Ubuntu cài đặt dash dưới tên /bin/sh, còn chương trình dòng lệnh người dùng là bash.
Dù vậy, sửa đổi dòng lệnh vẫn không thoát khỏi những hạn chế. Con trỏ không thể dịch chuyển ngay đến một vị trí, hay tua tới một câu lệnh nào được. Thư viện sửa đổi dòng lệnh cố thêm nhiều phím hơn để hoàn thành những tác vụ thường gặp, như ctl-A đi về đầu dòng, ctl-E đi về cuối dòng. Nhưng vẫn không giải quyết được hết các vấn đề! Thư viện luôn thiếu một tác vụ! Bàn phím luôn thiếu một phím!! Con người làm sao nhớ hết được đống phím kỳ quái kia!!!
Nhưng rồi thời đại đồ họa đến. Con chuột xuất hiện. Tất cả chỉ để hỗ trợ tác vụ soạn thảo văn bản. Cơ hội ngàn vàng để chúng ta tạo ra cách giải quyết đẹp hơn. Cơ hội ngàn vàng để khắc phục sự phình to và chậm chạp của phần mềm dòng lệnh mà readline là thủ phạm. Để chúng ta bỏ đi hết những "thủ thuật" (hacks) chỉ thị phần cứng in ra một bảng biểu, hay một phần mềm mà nội dung phủ kín màn hình (như phần mềm top, vi, emacs, tôi gặp khó khăn trong khi miêu tả cái này), mà thay bằng những phần mềm đồ họa, cập nhật giao diện theo cách mà "nó nên làm" thay vì dùng thủ thuật đơn lẻ mà cần phần cứng hiểu.
Đáng lẽ mọi người có thể quay về dùng dash với tâm trạng thoải mái. Và sửa đổi dòng lệnh theo cách khoa học, đạt được hiệu quả công việc cao nhất. Nhưng thế giới vẫn kẹt trong thời kỳ sử dụng máy đánh chữ và những thiết bị đầu cuối văn bản, cho dù họ đã ở thời đại đồ họa.
Người ta nói rằng UNIX là một hệ điều hành chia-sẻ-thời-gian, nghĩa là nó cho phép nhiều người cùng sử dụng tại cùng một thời điểm, và nhiều chương trình cùng chạy. Nhưng đối với một người dùng, họ chỉ tương tác với một chương trình, cùng lắm một nhóm vài ba chương trình tại một thời điểm.
Đồ họa xuất hiện, khiến một phiên làm việc của người dùng đa nhiệm hơn thấy rõ. Vì một màn hình đồ họa là một hình chữ nhật chứa các điểm ảnh (pixel), việc vẽ lên màn hinh trở nên tự do hơn, tùy ý hơn. Trong khi việc vẽ trên một thiết bị đầu cuối có màn hình (sẽ gọi là vt102) và máy đánh chữ là khá hạn chế, cần sự hỗ trợ của phần cứng. Muốn vẽ một bảng thì chỉ thị phần cứng bật sáng các điểm ảnh. Một thanh trạng thái tiến lên bằng cách đổi màu một vài điểm ảnh. Trong khi ở vt102, tôi nhớ là phải "chuyển chế độ", phải in ra \r để quay về đầu dòng rồi viết lại nội dung. Đồ họa mạnh mẽ hơn vt102 rất nhiều. Và việc đầu tiên sau khi nguòi ta tạo ra trình quản lý cửa sổ đồ họa là tạo ra chương trình giả lập thiết bị đầu cuối vt102 (terminal emulator).
Bây giờ một vt102 không còn là phần cứng, mà là phần mềm. Ta có thể tùy biến, mở rộng nó. Không còn vấn đề chi phí nâng cấp phần cứng nữa. Phần mềm dòng lệnh có thể loại bỏ các lệnh gọi tới readline, và làm đúng công việc của mình là chạy lệnh. Việc xử lý các phím sang trái sang phải là việc của môi trường dòng lệnh. Việc điền vào câu lệnh trước đó là việc của môi trường dòng lệnh.
Nhưng hiện nay trên các hệ thống UNIX, các môi trường dòng lệnh hầu như chẳng làm gì cả, ngoài việc hỗ trợ những phím của các vt102 ngày xưa. Sửa đổi dòng lệnh vẫn là do chương trình dòng lệnh làm. Việc sử dụng phím mũi tên để di chuyển con trỏ rất chậm chạp. Chúng ta vẫn không dùng được dash.
Trong khi đó, hệ điều hành Plan 9 có cách làm việc trong môi trường dòng lệnh mới. Chương trình dòng lệnh rc chỉ có nhiệm vụ chạy lệnh. Môi trường dòng lệnh được cung cấp bởi trình quản lý cửa sổ rio (gọi là một cửa sổ chạy rc). Một cửa sổ dòng lệnh giống như một trình soạn thảo văn bản, người dùng có thể tự do chỉnh sửa tùy ý bằng chuột. Nếu bạn nhập sai lệnh, bấm chuột vào chỗ bạn muốn sửa và thực hiện thay đổi. Muốn chạy một lệnh cũ, kéo lên và bôi đen vào toàn bộ câu lệnh, bấm chuột giữa và chọn `send'. Toàn bộ nội dung trong cửa sổ chạy rc mà bạn thấy đều nằm trong tập tin /dev/text. Nếu bạn muốn tìm một lệnh mà bạn đã chạy trước đó rất lâu, dùng grep để tìm trong /dev/text.
Chương trình dòng lệnh rc chỉ có mỗi chức năng chạy lệnh. Nhờ sự phát triển của công nghệ, triết lý UNIX - mỗi chương trình chỉ có một nhiệm vụ và phải làm tốt - được bảo toàn. Công việc sửa đổi dòng lệnh được dồn hết vào trình quản lý cửa sổ - nhưng nhờ có chuột, và nguyên tắc của Plan 9 là chỉ dùng chuột để thao tác với văn bản, trình quản lý cửa sổ cũng không phải làm quá nhiều công việc.
plan9port đưa các phần mềm Plan 9 sang UNIX. Nhờ có một môi trường dòng lệnh tốt (9term), nên việc sử dụng chương trình dòng lệnh dash trở nên vô cùng dễ dàng. Gần một tháng nay tôi đã đặt dash làm chương trình dòng lệnh cho tài khoản của tôi (tại /etc/passwd), vừa mới đổi sang rc. Cả hai đều không có readline.
Thực ra dash là lựa chọn duy nhất của tôi cho chương trình dòng lệnh POSIX. Các chương trình dòng lệnh khác đều sử dụng readline, và đều không hoạt động. Thật không phải là dư âm của thời kỳ máy đánh chữ, mà chúng ta đang sống ở thời kỳ máy đánh chữ, thời kỳ của vt102 vậy!
Cuối cùng, chúng ta sẽ đi thăm quan một số hình ảnh các chương trình dòng lệnh hiển thị những thứ kỳ lạ.
Dấu nhắc lệnh mặc định của ash: ~ $ [6n Xóa một ký tự của ash trong 9term, ash thêm [J vào sau https://imgur.com/a/ExpTuvn
zsh in ra những thứ bẩn thỉu: https://imgur.com/a/iPW5Pdc ! ! bash, mksh, oksh in ra chuông mỗi khi bấm nút backspace mà chưa nhập gì: https://imgur.com/a/e1ULRKV
Bản chất của vi và mg (openbsd emacs): https://imgur.com/a/5hQu8re
apk del zsh tcsh bash mksh oksh
(1/12) Purging apk-tools-zsh-completion (2.14.9-r1) (2/12) Purging bash-doc (5.2.37-r0) (3/12) Purging bash (5.2.37-r0) Executing bash-5.2.37-r0.pre-deinstall (4/12) Purging gcc-zsh-completion (5.9-r5) (5/12) Purging git-zsh-completion (5.9-r5) (6/12) Purging mksh-doc (59c-r4) (7/12) Purging mksh (59c-r4) Executing mksh-59c-r4.pre-deinstall (8/12) Purging oksh-doc (7.6-r1) (9/12) Purging oksh (7.6-r1) Executing oksh-7.6-r1.pre-deinstall (10/12) Purging tmux-zsh-completion (5.9-r5) (11/12) Purging zsh-doc (5.9-r5) (12/12) Purging zsh (5.9-r5) Executing zsh-5.9-r5.pre-deinstall Executing busybox-1.37.0-r14.trigger OK: 1722 MiB in 576 packages
Author: not me