如何将 unix 命令的结果插入 tcsh CLI?

如何将 unix 命令的结果插入 tcsh CLI?

我经常发现自己想要创建带有日期戳的文件和文件夹。

例如,我希望能够通过输入以下内容创建一个名为“160408-​​projectA”的带有 yymmdd 日期戳的文件夹:

mkdir <ctrl-;>-projectA

我试过使用bindkey -cs '^;' '`date +%y%m%d | perl -pe chomp`'

...但它说“bad key spec ^;”。即使切换到另一个键,例如 ^o,它也会出错,并显示“160408:Command not found”。

使用 tcsh 可以实现这个吗?

答案1

我认为这Ctrl;不可能的。在解释原因之前,让我先讨论一下什么是可能的。

bindkey -s '^;' '`date +%y%m%d | perl -pe chomp`'

只要从尝试使用Ctrl-中去掉“c” O,它就可以正常工作。

tcsh命令可能不支持Ctrl- ;,这是一个非常明智的设计,因为 tcsh 旨在与传统的 Unix 终端(或某些行为类似的软件)一起工作,而传统的 Unix 终端不支持Ctrl- ;

那么,为什么 Unix 终端不支持Ctrl- ;

所有这些序列的主要目的Ctrl是提供一种简单的方法来输入/表示前 32 个 ASCII 字符,因为这些字符没有易于输入的字符。直接等效于Ctrl- 的字符;在不需要序列的情况下输入并不那么困难Ctrl,这就是为什么没有特殊的 Ctrl 字符(如Ctrl- ;)通常受支持的原因。

我会详细说明。首先,我要指出的是,这个答案的大部分内容都是参考我Ctrl在网站上记录的有关序列的一些信息。][Cyber​​Pillar][:Ctrl键盘序列

Ctrl 字符的规则之一是,如果您按住Ctrl并按下 ASCII 值为 63 至 95 的字符,那么您最终得到的字符的 ASCII 值将比您按下的字符少 64。(是的,如果适用,将从 63 中减去 64。稍后将对此进行更多讨论。)

另一条规则是,如果您按住Ctrl并按下 ASCII 值为 96 到 122 的字符,那么您最终会得到一个比您输入的字符少 96 的字符。因此,Ctrl- Shift- A(大写字母)和Ctrl- a(小写字母)最终会得到相同的字符。这就是为什么如果您按下Ctrl- c,您可能会看到Ctrl-C回显。终端将 ASCII 3 转换为表示Ctrl-的字符串,在准备输出消息时,忽略您按下-C的事实以生成 ASCII 3。Ctrlc

;(分号)是 ASCII 59,不是 ASCII 64 到 95 也不是 ASCII 96 到 122。因此,刚刚指定的规则(涵盖 ASCII 63 到 122)没有为 ASCII 59(涵盖Ctrl- ;)提供任何通用解释。

一个感觉像例外的值是针对Ctrl-的普遍支持的规则?。如果Ctrl-;确实有一个常见的解释,那么这个常见的解释可能遵循与Ctrl-相同的模式?。该?字符的 ASCII 为 63。因此,从 63 中减去 64 得到 -1,这基本上等同于 127 和下溢情况,可以忽略不计。结果是Ctrl-?按键组合实际上最终增加了 64,因此 63 + 64 = 127。ASCII 127 通常对应于键Delete,这可能很难表示,因为Delete具有常见的特殊行为(即删除文本)。因此,ASCII 127 可能经常通过具有普遍支持的Ctrl序列而受益匪浅。这样,人们可以使用键盘序列相对轻松地输入 ASCII 127 代码。

按照该模式(添加 64),Ctrl-;将得到 ASCII 123,即左花括号(“ {”)。人们不支持将Ctrl-;作为通用的标准输入方式,{因为{在键盘上有自己相对简单的输入方式(即按Shift- [)。

相关内容