내 로컬 컴퓨터에 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 병합)일반 쉘 명령으로 터미널에는 오류가 표시되지 않습니다.
물론 내 직장에서는 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
이는 너비가 0인 단어 커넥터이며 실제로 내 시스템에서 인쇄되지 않습니다.
위와 같은 것이 od
실제로 무엇인지 알려줄 것입니다.
아마도 이러한 문자를 제거하는 가장 쉬운 방법은 오류 메시지에서 문제가 되는 줄을 찾아서 처음부터 다시 입력하는 것입니다. (또는 tcsh
줄 번호가 거기에 제공되지 않는 것 같아서 오류 메시지 대신 디버그 인쇄를 합니다. 아 뭐.)
그러나 원할 경우 유사한 방식으로 전체 파일을 파이프할 수 있습니다 tr -d '\200-\377'
. 그러면 상위 비트가 설정된 모든 바이트가 제거됩니다. (즉, 파일이 UTF-8로 인코딩되어 있고 tr
실제 문자가 아닌 바이트 단위로 내 시스템에서 작동하는 것 같다고 가정하면,그리고ASCII가 아닌 다른 문자는 보존하고 싶지 않습니다. 백업을 하세요. )
답변2
.tcshrc 파일은 간단합니다.
set history=2000
set savehist=(2000 merge)
참고: = 기호 앞뒤에는 공백이 있을 수 없습니다.