我不知道如何使用 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
Enter。0000000 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 shell
ksh 衍生版本。
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快速检查功能。