为什么我的箭头键在sh中不起作用?


16

我最近安装了Ubuntu,在终端上运行sh时,我的箭头键不起作用,因此无法浏览通话记录或编辑输入内容。就像奇怪的角色一样出现^[[A

登录shell是bash,它可以正常工作,但是一旦我切换到sh,它们就无法工作。

我怎样才能解决这个问题?


2
为什么切换到sh?
oenone 2011年

2
@oenone为什么将OP切换到sh什么关系?当然,他这么做的原因与有问题的事实无关。
Agi Hammerthief 2014年

Answers:


15

/bin/sh(短划线)壳是一POSIX兼容,缩减功能壳更有效(更小的),用于引导系统。因此,不包括历史记录和高级命令行编辑。对于严格的POSIX脚本而言,它比作为交互式shell更合适。这个想法是默认情况下'login'shell是bash,但是引导系统将使用破折号。Ubuntu 11.04的手册页显示破折号具有历史记录和命令行编辑功能,但该程序没有这些功能。看一下基本可执行文件的大小。

$ 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

尝试习惯跑步$SHELLbash而不是仅仅sh


8

如果/bin/shDash,则必须--with-libedit在编译之前对其进行配置。否则,您仍然可以set -o vi在shell中运行,但是它没有任何用处。


0

sh没有任何历史。至少,我没有:

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*


@jasonwryan,您会注意到,与历史记录或行编辑模式相关的所有内容在该规范中都标有UP,这表示它是可选的(对于POSIX一致性,不是Unix一致性)。
斯特凡Chazelas

@StéphaneChazelas-也许是对的,但是无论如何,jasonwryan绝对是正确的。这是另一个链接。再说-你指的是$FCEDIT或者$HISTFILE甚至只是fc?我认为这些至少是强制性的-以及的渲染$PS1 \!。对于POSIX规范,我可能是错的-但它们都可以使用dash并且已经存在了很多年。
mikeserv

1
@mikeserv,不知道你的意思,但是重申,所有的fc$FCEDIT$HISTFILE$PS1在POSIX(标有UP为“用户可携”)可选。在shUnix的符合的系统将具有那些作为UP需要用于Unix的一致性(除其他事项外的Unix也要求echo -e输出-e<LF>)。但是,如果系统/外壳仅声明POSIX一致性,则不需要实现这些一致性。对于Debian来说ash,可以在编译时使用--with-libedit启用它,如上所述,但Debian至少没有启用。
斯特凡Chazelas

@StéphaneChazelas-非常感谢。在dash我因此用作包装拱比Debian的我把它完全不同。那是有价值的信息。奇怪的不在man
mikeserv
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.