自动完成中的终端历史记录

自动完成中的终端历史记录

我正在运行 Ubuntu 12.04 LTS,出于某种原因,没有终端历史记录(点击向上箭头查看上一个命令),也没有自动完成功能(点击 Tab 键)。这些出色的功能在我过去使用的任何 UNIX 机器上都一直有效。我查看了终端的键盘快捷键菜单,没有看到任何内容。

  1. 我如何才能让向上的箭头给我上一个终端命令?
  2. 如何让 Tab 键执行自动完成功能?

提前致谢!

编辑:我很确定我正在使用bashecho $SHELL返回/bin/sh。我在本地机器上运行它。我不确定如何运行历史记录,但当我这样做时,ls -a我没有看到通常的历史记录文件(我认为它被称为 .history?)

答案1

你不是在使用bash,而是在使用sh。这意味着什么取决于你的系统,在 Debian 和 Ubuntu 上/bin/sh是到 的符号链接,dash因此这就是您的默认 shell。dash没有您想要的功能,您需要切换到另一个 shell,例如bashzsh。您可以使用以下命令执行此操作chsh

$ chsh
Password: 
 Changing the login shell for terdon
 Enter the new value, or press ENTER for the default
  Login Shell [/bin/sh]: /bin/bash

现在,您打开的每个新终端都将运行bash,并且向上的箭头将为您提供历史记录。


sh即使在链接​​到 的系统上bash,两者也不等同。如 中所述man bash

   If  bash  is  invoked  with  the name sh, it tries to mimic the startup
   behavior of historical versions of sh as  closely  as  possible,  while
   conforming  to the POSIX standard as well.  When invoked as an interac‐
   tive login shell, or a non-interactive shell with the  --login  option,
   it  first  attempts  to read and execute commands from /etc/profile and
   ~/.profile, in that order.  The  --noprofile  option  may  be  used  to
   inhibit  this  behavior.  When invoked as an interactive shell with the
   name sh, bash looks for the variable ENV, expands its value  if  it  is
   defined,  and uses the expanded value as the name of a file to read and
   execute.  Since a shell invoked as sh does not attempt to read and exe‐
   cute  commands from any other startup files, the --rcfile option has no
   effect.  A non-interactive shell invoked with  the  name  sh  does  not
   attempt  to  read  any  other  startup files.  When invoked as sh, bash
   enters posix mode after the startup files are read.

相关内容