tcsh - 用于转义的回显转义码

All*_*lan 1 shell tcsh escape-characters

我正在尝试通过 printf 对其进行不同的操作来以编程方式创建一个文件。(即printf %s\\n hostname >> file.txt

我想发送一个 Esc 代码来清除屏幕(它将是第一行)。

在 bash 中,我只使用printf $'\033[2J'$'\033[;H'\033作为 的八位字节Esc)并清除屏幕。一切正常;作为文件中的第一行,当您cat打开文件时,它首先清除屏幕。

在 tcsh(FreeBSD root 的默认 shell)中,我似乎无法弄清楚如何“逃避转义”并获得等效的 bash 转义代码。

我一直在试验(printfecho

  • 回声 %{\e[2J]}
  • 回声\e
  • 回声 \\e
  • 回声 %{\033[2J}

如果有人能指出我正确的方向,我将不胜感激!

谢谢!

Sté*_*las 5

printf自行扩展格式(第一个)参数中的那些,不需要那些ksh93样式的$'...'引号。所以:

printf '\33[2J\33[H'
Run Code Online (Sandbox Code Playgroud)

请注意,这printf不是内置的tcsh,因此您将printf在文件系统上调用该命令。然后您也可以调用tputorclear命令,但tcsh由于tcsh对 termcap/terminfo 的内置支持不需要,因此您可以执行以下操作:

echotc clear
Run Code Online (Sandbox Code Playgroud)

这将在 terminfo 或 termcap 数据库中查询要为当前终端发送的正确转义序列(根据$TERM),这通常比使用硬编码更好。

如果你想使用tcshecho内置,你可以这样做:

set echo_style = both # meant to be the default in tcsh
echo -n '\033[2J\033[H'
Run Code Online (Sandbox Code Playgroud)

或者:

set echo_style = sysv # or both
echo '\033[2J\033[H\c'
Run Code Online (Sandbox Code Playgroud)