KornShell (ksh) 环绕

Posted

技术标签:

【中文标题】KornShell (ksh) 环绕【英文标题】:KornShell (ksh) wraparound 【发布时间】:2010-09-13 14:18:06 【问题描述】:

好的,我相信这很简单,但它让我发疯了。我最近开始开发一个程序,我不得不及时退后一点并使用 Redhat 9。当我从运行 KornShell (ksh) 的标准 xterm 在命令行上键入时,我到达了结尾line 屏幕向右滑动(切断我的命令的左侧),而不是将文本换行到新行。这对我来说很困难,因为我不能直接从命令行轻松地复制和粘贴上一个命令。我必须查看历史记录并从那里粘贴命令。如果您想知道,我会执行很多命令行 awk 脚本,这些脚本会导致行变得很长。

有没有办法强制命令行换行而不是将可见性转移到我正在输入的命令的右侧?

我已经翻遍了手册页选项,但没有运气。

我在跑步:

XFree86 4.2.99.903(174) KSH 5.2.14。

谢谢。

【问题讨论】:

如果您得到想要的答案,请告诉我们。 【参考方案1】:

你做了man ksh吗?

你想做一个set -o multiline

摘自man ksh

多行:

内置编辑器将在屏幕上使用多行 长于屏幕宽度的线条。这可能不 适用于所有终端。

【讨论】:

适用于腻子 - 它一直在驱使我!【参考方案2】:

eval $(resize) 应该这样做。

【讨论】:

似乎每次更改终端窗口大小(腻子)时都必须运行它。有没有动态的方法来做到这一点?【参考方案3】:

如果可能,请尝试通过添加 \ 将命令分解为多行 即:

$我的命令-a foo \ -f 酒吧\ -c 差异

【讨论】:

【参考方案4】:

简单的答案是:

$ set -o multiline

5.12 之前的ksh,就像NetBSD 6.1 附带的ksh,没有这个选项。您将不得不关闭当前的交互式输入行编辑模式,通常是 emacs:

$ set +o emacs

这会完全关闭很多功能,例如制表符补全或使用“向上箭头”键回滚上一个命令。

如果您决定以某种方式习惯 emacs 模式,请记住 ^a 转到行首(“Home”键不起作用k)并且 ^e 转到行尾。

【讨论】:

【参考方案5】:

我不知道强制外壳换行的方法,但我想问你为什么要写这么长的行。使用 awk 脚本,我只需将脚本用单引号括起来,然后在我想要的地方换行。只有在脚本中需要单引号时,它才会变得棘手——如果同时需要单引号和双引号,它就会变得非常棘手。其实规则很简单:用单引号包裹整个脚本,当你想在脚本中加单引号时,写'\''。第一个引号终止前一个单引号字符串;反斜杠单引号产生单引号;最后一个单引号开始一个新的单引号字符串。如果您需要为 eval 或类似的东西转义这些字符,那真的很麻烦。

另一个问题是 - 为什么不启动编辑器。由于我是一个顽固的 vim 疯子(好吧 - 我已经使用 vi 超过 20 年了,所以它比其他替代品更容易),我将 Korn shell 设置为 vi 模式(set -o vi),并且可以执行 escape-v 以在我输入的任何内容上启动编辑器。

【讨论】:

【参考方案6】:

这是一个务实的答案,但是当这对我来说是个问题时,我通常会这样做:

strings ~/.history | grep COMMAND

strings ~/.history | tail

(历史文件中有一点二进制数据,因此是'strings')

【讨论】:

以上是关于KornShell (ksh) 环绕的主要内容,如果未能解决你的问题,请参考以下文章

Bash 还是 KornShell (ksh)? [关闭]

在 Bash 和 KornShell (ksh) 中获取命令的退出代码

.sh 和 .ksh —— 三种主要的 Shell简介(Korn shell)

我可以在 KornShell 中获取当前脚本的绝对路径吗?

如何使用 vi 编辑器在 KornShell 命令行自动完成

shell编程笔记