Mengapa tombol panah saya tidak berfungsi di sh?

16

Saya baru-baru ini menginstal Ubuntu dan ketika saya menjalankan sh di Terminal, tombol panah saya tidak berfungsi sehingga saya tidak bisa melihat riwayat panggilan saya atau mengedit apa pun yang saya ketikkan. Itu hanya muncul sebagai karakter aneh seperti ^[[A.

Shell login adalah bash dan berfungsi dengan baik tetapi begitu saya beralih ke sh, mereka tidak berfungsi.

Bagaimana saya bisa memperbaikinya?

Joe
sumber
2
mengapa Anda beralih ke sh?
Oenone
2
@oenone. Mengapa penting mengapa OP beralih sh? Tentunya alasan mengapa dia melakukan itu tidak relevan dengan fakta bahwa itu bermasalah.
Agi Hammerthief

Jawaban:

15

The /bin/sh(dash) shell adalah POSIX compliant, mengurangi shell fungsi menjadi lebih efisien (lebih kecil) untuk booting sistem. Sebagai bagian dari itu, riwayat dan pengeditan baris perintah lanjutan tidak termasuk. Itu lebih tepat untuk skrip POSIX yang ketat daripada sebagai shell interaktif. Idenya adalah bahwa shell 'login' akan bash secara default, tetapi sistem boot akan menggunakan tanda hubung. Halaman manual di Ubuntu 11.04 menunjukkan bahwa dasbor memiliki histori dan pengeditan baris perintah, tetapi program tidak memiliki fitur-fitur ini. Lihatlah ukuran executable dasar.

$ 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

Cobalah untuk terbiasa berlari $SHELLatau bashtidak hanya sh.

Arcege
sumber
8

Dalam hal /bin/shini Dash , itu harus dikonfigurasi --with-libeditsebelum kompilasi. Kalau tidak, Anda masih dapat berjalan set -o vidi shell tetapi tidak melakukan sesuatu yang bermanfaat.


sumber
0

shtidak memiliki riwayat. Setidaknya, milik saya tidak:

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*
Teddy
sumber
1
Betulkah? Menurut spesifikasi IEEE yang dilakukannya: pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html
jasonwryan
@jasonwryan, Anda akan melihat bahwa segala sesuatu yang berkaitan dengan mode histori atau pengeditan baris ditandai dengan UP di spec yang artinya opsional (untuk kesesuaian POSIX, bukan kesesuaian Unix).
Stéphane Chazelas
@ StéphaneChazelas - mungkin benar, tapi jasonwryan pasti benar. Ini tautan lain . Dan selain itu - apakah yang Anda maksudkan $FCEDITatau $HISTFILEatau bahkan adil fc? Saya pikir setidaknya mereka wajib - dan rendering dari $PS1 \!. Saya bisa salah tentang spec POSIX - tetapi mereka semua bekerja dashdan memiliki selama bertahun-tahun.
mikeserv
1
@mikeserv, tidak yakin apa yang Anda maksud, tetapi untuk mengulangi, semua fc, $FCEDIT, $HISTFILE, $PS1adalah opsional di POSIX (ditandai dengan UP untuk "User Portabilitas"). The shsistem conformant Unix akan memiliki orang-orang seperti UP diperlukan untuk Unix kesesuaian (antara lain Unix juga mensyaratkan bahwa echo -eoutput -e<LF>). Tetapi jika sistem / shell hanya mengklaim kesesuaian POSIX, maka itu tidak perlu untuk mengimplementasikannya. Untuk Debian ash, mungkin diaktifkan pada waktu kompilasi dengan --with-libedit seperti yang telah disebutkan, tetapi setidaknya Debian tidak.
Stéphane Chazelas
@ StéphaneChazelas - terima kasih banyak. Karena itu dashsaya menggunakan sebagai paket untuk Arch secara drastis berbeda dari Debian yang saya ambil. Itu info berharga. Aneh itu tidak di man.
mikeserv