加载 tcshrc 时出现问题

加载 tcshrc 时出现问题

我在本地电脑上安装了 ubuntu 16.04,我正在尝试使我的工作环境与我工作中的配置方式类似

为了实现这一点,我想使用相同的 tcshrc 文件(是的,我们使用 tcsh,不知道为什么......)

无论如何,当我尝试打开 tcsh 终端(或源 ~/.tcshrc )时,我收到错误:

set: Variable name must begin with a letter.

试图找出原因,我发现接下来的几行足以导致它

#!/bin/tcsh
echo 0
set history = 2000  # this line is not the cause, verified by echoing
echo 1
set savehist = (2000 merge)
echo 2

输出:

0
1
set: Variable name must begin with a letter.

当我尝试跑步时 设置 savehist = (2000 合并)作为常规 shell 命令,终端不会显示任何错误。

当然,在我的工作中,tcshrc 工作得很好。在这两个我都安装了 tcsh 6.18.01

欢迎任何帮助

谢谢

答案1

一个可能的原因是:您实际上在那里有一个无效字符,是在创建文件时意外添加的。它必须是通常不(非常)可见的东西,例如,不间断的空格或一些这样的。

$ cat test.csh
set foo = bar
$ tcsh test.csh 
set: Variable name must begin with a letter.

$ od -c test.csh
0000000   s   e   t     342 201 240   f   o   o       =       b   a   r
0000020  \n
0000021

那是一个零宽度的单词连接器,它实际上不会在我的系统上打印。

像上面这样的东西od应该告诉你实际是什么。

删除此类字符的最简单方法可能是从错误消息中找到有问题的行,然后从头开始重新输入它们。 (或者调试打印而不是错误消息,因为tcsh似乎没有在其中给出行号。哦,好吧。)

但如果您愿意,您可以通过类似的方式管道整个文件tr -d '\200-\377',这将删除设置了高位的所有字节。 (也就是说,假设文件是​​ UTF-8 编码的,并且它tr似乎在我的系统上工作,在字节上,而不是实际字符上,您不想保留任何其他非 ASCII 字符。做好备份。)

答案2

.tcshrc 文件中有简单的:

set history=2000 
set savehist=(2000 merge)

注意:= 号前后不能有空格。

相关内容