Tcsh

載入 tcshrc 的問題

  • November 21, 2017

我在本地電腦上安裝了 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.

當我嘗試將 **set savehist = (2000 merge)**作為正常 shell 命令執行時,終端不會顯示任何錯誤。

當然,在我的工作中,tcshrc 工作正常。在這兩個中我都安裝了 tcsh 6.18.01

歡迎任何幫助

謝謝

一個可能的原因:您實際上有一個無效字元,在創建文件時意外添加。它必須是通常不(非常)可見的東西,例如,不間斷的空間或類似的東西。

$ 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 字元你想保留. 做備份。)

引用自:https://unix.stackexchange.com/questions/399610