我最近安装了 Ubuntu,当我在终端上运行 sh 时,我的箭头键不起作用,因此我无法查看通话记录或编辑我正在输入的内容。它只是以奇怪的字符出现,比如^[[A
。
登录 shellbash
工作正常,但一旦我切换到sh
,它们就不起作用。
我怎样才能解决这个问题?
答案1
(dash) shell/bin/sh
是一个符合 POSIX 标准的精简功能 shell,可以更有效(更小)地启动系统。作为其中的一部分,历史记录和高级命令行编辑不包括在内。它比作为交互式 shell 更适合严格的 POSIX 脚本编写。这个想法是“登录”shell 默认情况下是 bash,但引导系统将使用 dash。 Ubuntu 11.04 中的手册页显示 dash 具有历史记录和命令行编辑功能,但该程序没有这些功能。查看基本可执行文件的大小。
$ 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
尝试习惯跑步$SHELL
或bash
而不只是跑步sh
。
答案2
万一/bin/sh
是短跑,必须--with-libedit
在编译前配置。否则你仍然可以set -o vi
在 shell 中运行,但它不会做任何有用的事情。
答案3
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*