我在本地电脑上安装了 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)
注意:= 号前后不能有空格。