Tại sao các phím mũi tên của tôi không hoạt động trong sh?


16

Gần đây tôi đã cài đặt Ubuntu và khi tôi chạy sh trên Terminal, các phím mũi tên của tôi không hoạt động nên tôi không thể xem lịch sử cuộc gọi của mình hoặc chỉnh sửa bất cứ điều gì tôi đang gõ. Nó chỉ xuất hiện như những nhân vật kỳ lạ như thế ^[[A.

Shell đăng nhập là bash và nó hoạt động tốt nhưng ngay khi tôi chuyển sang sh, chúng không hoạt động.

Làm thế nào tôi có thể sửa lỗi này?


2
tại sao bạn chuyển sang sh?
oenone

2
@oenone Tại sao tt lại quan trọng tại sao OP chuyển sang sh? Chắc chắn lý do tại sao anh ta làm điều đó không liên quan đến thực tế là nó có vấn đề.
Agi Hammerthief

Câu trả lời:


15

Các /bin/sh(dash) vỏ là một POSIX tuân thủ, giảm shell chức năng để có hiệu quả hơn (nhỏ hơn) để khởi động hệ thống. Là một phần trong đó, lịch sử và chỉnh sửa dòng lệnh nâng cao không được bao gồm. Nó thích hợp hơn cho kịch bản POSIX nghiêm ngặt hơn là một vỏ tương tác. Ý tưởng là shell 'đăng nhập' sẽ được bash theo mặc định, nhưng hệ thống khởi động sẽ sử dụng dấu gạch ngang. Trang con người trong Ubuntu 11.04 cho thấy dấu gạch ngang có lịch sử và chỉnh sửa dòng lệnh, nhưng chương trình không có các tính năng này. Hãy nhìn vào kích thước của các thực thi cơ sở.

$ ls -l /bin/*ash /bin/sh
-rwxr-xr-x 1 root root 822420 Mar 31 15:26 /bin/bash
-rwxr-xr-x 1 root root  83848 Nov 15  2010 /bin/dash
lrwxrwxrwx 1 root root      4 May 17 21:15 /bin/rbash -> bash
lrwxrwxrwx 1 root root      4 May 17 21:15 /bin/sh -> dash
$ strings /bin/bash | egrep -ci 'fc|hist'
181
$ strings /bin/dash | egrep -ci 'fs|hist'
1

Cố gắng làm quen với việc chạy $SHELLhoặc bashthay vì chỉ sh.


8

Trong trường hợp /bin/shDash , nó phải được cấu hình --with-libedittrước khi biên dịch. Nếu không, bạn vẫn có thể chạy set -o vitrong trình bao nhưng nó không làm gì hữu ích.


0

shkhông có bất kỳ lịch sử nào. Ít nhất, của tôi không:

server$ sh
\h$ history 
sh: history: not found
\h$ fc
sh: fc: not found
\h$ exit
server$ type sh
sh is hashed (/bin/sh)
server$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Jun  1 18:43 /bin/sh -> dash*

1
Có thật không? Theo thông số kỹ thuật của IEEE, nó thực hiện: pubs.opengroup.org/onlinepub/009695399/utilities/sh.html
jasonwryan

@jasonwryan, bạn sẽ nhận thấy rằng mọi nội dung liên quan đến lịch sử hoặc chế độ chỉnh sửa dòng được đánh dấu bằng UP trong thông số đó có nghĩa là tùy chọn (đối với tuân thủ POSIX, không tuân thủ Unix).
Stéphane Chazelas

@ StéphaneChazelas - có thể đúng, nhưng jasonwryan chắc chắn là chính xác. Đây là một liên kết khác . Và bên cạnh đó - là bạn đề cập đến $FCEDIThoặc $HISTFILEhoặc thậm chí chỉ fc? Tôi nghĩ rằng những điều đó ít nhất là bắt buộc - và kết xuất của $PS1 \!. Tôi có thể sai về thông số POSIX - nhưng tất cả chúng đều hoạt động dashvà có trong nhiều năm.
mikeerv

1
@mikeserv, không chắc chắn những gì bạn có ý nghĩa, nhưng nhắc lại, tất cả fc, $FCEDIT, $HISTFILE, $PS1là tùy chọn trong POSIX (được đánh dấu bằng UP cho "tài năng di chuyển"). Các shhệ thống tuân thủ Unix sẽ có những hệ thống như UP là bắt buộc để tuân thủ Unix (trong số những thứ khác Unix cũng yêu cầu echo -eđầu ra đó -e<LF>). Nhưng nếu một hệ thống / hệ vỏ chỉ yêu cầu tuân thủ POSIX, thì nó không cần phải thực hiện chúng. Đối với Debian ash, nó có thể được kích hoạt vào thời gian biên dịch với --with-libedit như đã đề cập, nhưng ít nhất Debian thì không.
Stéphane Chazelas

@ StéphaneChazelas - cảm ơn rất nhiều. Do đó, dashtôi sử dụng như được đóng gói cho Arch rất khác so với tôi sử dụng Debian. Đó là thông tin có giá trị. Lạ là không có man.
mikeerv
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.