Tcsh
載入 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.
當我嘗試將 **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 字元你想保留. 做備份。)