Bourne Shell 中的 TAB 自动完成

Bourne Shell 中的 TAB 自动完成

我不知道如何使用 TAB 键来自动完成文件名、命令或任何内容。

我在类 Unix 系统(OS/390)上,依赖于几个在 sh(Bourne shell,而不是 BASH)中工作的脚本,但在其他 shell(例如 tcsh)中不起作用,所以我无法切换 shell 。我通常通过 ssh 或 telnet 从本地运行 bash 的 Ubuntu GNOME 终端连接到该系统。其他人通过 telnet 从 Windows XP 命令提示符连接到 OS/390 系统,并且他们能够在发出“set -o emacs”后使用 TAB 键自动完成。当我发出“set -o emacs”时,我获得了一些适当的功能(例如,按 ctrl-p 向后浏览历史记录),但没有自动完成。

我知道“set -o vi”选项,但使用“ESC-*”等对我没有吸引力,因为我知道简单的 TAB 键对其他人有效。

Ubuntu、GNOME 终端、bash 或 ssh 是否会发送与运行 telnet 的 Windows XP 命令提示符不同的制表符?

有谁知道为什么我可能无法获得自动完成选项卡,而同一台远程计算机上运行相同 shell 的人却可以?

应该做什么才能启用选项卡自动完成

答案1

(没有回答您的确切问题,但有很多解决方法。)

您不需要将脚本 shell 与交互式 shell 相匹配。 (例如,大多数 (t)csh 或 zsh 用户编写 sh 脚本)。如果您拥有或可以安装比 Bourne shell(zsh、bash、tcsh)更好的交互式 shell,请使用它。即使不能,也看看是否有 ksh,它的交互功能可能比 Bourne shell 稍好一些。

echo ' Ctrl您可以通过输入+检查 Tab 键发送的字符V Tab ' | od -t x1 Enter0000000 09 0a(即在位置 0,两个字符,一个制表符和一个换行符)是预期的输出。我不希望这成为问题。

如果你无法获得舒适的环境,你可以尝试远程做更多的事情,尽可能使用本地机器进行交互。这有其优点和缺点。

  • 从Linux(或大多数其他unices,包括OSX,但不是从Windows),您可以使用sshfs访问远程文件系统。
  • 在 Emacs 中,您可以通过以下方式轻松浏览远程文件流浪汉(打开/os390hostname:/path/on/remote/machine,你就完成了)。您还可以使用埃谢尔获取远程 shell 接口(Emacs 内置 shell);如果您更改为远程目录 ( cd /os390hostname:/path/on/remote/machine),您启动的外部命令将在远程计算机上执行。如果您需要以 root 身份运行命令,Tramp(以及基于它的 Eshell)可以将 ssh 与 su 或 sudo 结合使用

答案2

当您能够发出set -o emacs并且没有收到错误消息时,您很可能没有使用bourne shellksh 衍生版本。

Korn shell 使用 ESC 自动完成,你尝试过吗?

顺便说一句:如果您真的喜欢使用带有历史编辑器和文件名完成功能的 Bourne Shell,您可以在以下位置尝试我的便携式 Bourne Shell:

http://sourceforge.net/projects/schilytools/files/

由于这是从 sbrk() 转换为 malloc() 的 Bourne Shell,因此它可以在非 UNIX 环境中运行。

移植过程中可能还存在一些问题:

  • 如果您的 OS/390 环境使用 EBCDIC,则 ctype* 文件需要一些工作。

  • 如果您的环境既不支持 fork() 也不支持类似 OpenVMS 的 vfork() 模拟,则可能无法在不花费几天努力的情况下使其编译和运行。

http://schillix.sourceforge.net/man/man1/bosh.1.html快速检查功能。

相关内容