Ok tuşları neden sh ile çalışmıyor?


16

Son zamanlarda Ubuntu'yu yükledim ve Terminal'de sh çalıştırdığımda ok tuşları çalışmıyor, bu yüzden arama geçmişimi geçemiyor veya yazdıklarımı düzenleyemiyorum. Sadece tuhaf karakterler gibi çıkıyor ^[[A.

Giriş kabuğu bash ve iyi çalışıyor ama sh'ye geçer geçmez, çalışmıyorlar.

Bunu nasıl düzeltebilirim?


2
neden sh ye geçiyorsun?
Oinone

2
@oenone OP'nin neden geçiş yaptığının önemi shnedir? Elbette bunu yapmasının nedeni, sorunlu olmasıyla alakasız.
Agi Hammerthief

Yanıtlar:


15

/bin/sh(Çizgi) kabuk POSIX uyumlu, işlevsellik kabuk sistemini başlatmak için daha verimli (daha küçük) olmaktır. Bunun bir parçası olarak, geçmiş ve gelişmiş komut satırı düzenleme dahil değildir. Sıkı POSIX komut dosyaları için etkileşimli kabuktan daha uygundur. Fikir 'giriş' kabuğu varsayılan olarak bash olacak, ancak önyükleme sistemi tire kullanıyor olacaktır. Ubuntu 11.04'teki kılavuz sayfası, tire işaretinin geçmiş ve komut satırı düzenlemesine sahip olduğunu, ancak programın bu özelliklere sahip olmadığını gösterir. Baz çalıştırılabilir dosyaların boyutuna bir göz atın.

$ 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

Çalışmaya $SHELLya da bashsadece yerine alışmaya çalışın sh.


8

Dash olması durumunda /bin/sh, derlemeden önce yapılandırılması gerekir . Aksi takdirde hala kabukta çalışabilirsiniz , ancak yararlı bir şey yapmaz.--with-libeditset -o vi


0

shgeçmişi yok. En azından benim:

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
Gerçekten mi? IEEE spesifikasyonuna göre: pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html
jasonwryan

@jasonwryan, geçmiş veya satır düzenleme modu ile ilgili herhangi bir şeyin bu özellikte bir UP ile işaretlendiğini fark edeceksiniz, bu da isteğe bağlı olduğu anlamına gelir (Unix uyumluluğu değil, POSIX uyumu için).
Stéphane Chazelas

@ StéphaneChazelas - belki doğru, ama jasonwryan kesinlikle doğrudur. İşte başka bir bağlantı . Ve üstelik - sen kastediyoruz $FCEDITya $HISTFILEda sadece ya fc? Bunların en azından zorunlu olduğunu düşündüm - ve $PS1 \!. POSIX özellikleri hakkında yanlış olabilirim - ama hepsi dashyıllarca çalışıyor ve var.
mikeserv

1
@mikeserv, emin ne demek, ancak reiterate, tüm fc, $FCEDIT, $HISTFILE, $PS1( "Kullanıcı Taşınabilirlik" için UP ile işaretlenmiş) POSIX'deki isteğe bağlıdır. shUnix uyumluluğunu sistemlerinin (diğer şeylerin yanı sıra Unix da gerektirir UP sıra bu Unix uygunluk için gereklidir olacak echo -eçıkışları -e<LF>). Ancak bir sistem / kabuk yalnızca POSIX uyumluluğunu iddia ederse, bunları uygulamak zorunda değildir. Debian için ash, daha önce de belirtildiği gibi --with-libedit ile derleme zamanında etkinleştirilebilir, ancak en azından Debian bunu yapmaz.
Stéphane Chazelas

@ StéphaneChazelas - çok teşekkürler. dashArch için paketlenmiş olarak ben kullanımı bu nedenle Debian en almam oldukça farklıdır. Bu değerli bir bilgi. Tuhaf değil man.
mikeserv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.