bash: '(' 구문 근처에서 예기치 않은 오류가 발생했습니다. [닫음]

bash: '(' 구문 근처에서 예기치 않은 오류가 발생했습니다. [닫음]

저는 컴퓨터 미생물학 튜토리얼을 수강하고 있습니다.

10페이지에는 다음 내용이 포함되어 있습니다 ex01.csh(원래 들여쓰기 안 됨, StackExchange 기여자가 들여쓰기함).

foreach f (tmp*)
  echo $f
  set zid = `grep ZINC $f`
  if !(-e "$zid".mol2) then
     set filename = "$zid".mol2
  else foreach n (`seq –w 1 99`)
    if !(-e "$zid"_"$n".mol2) then
      set filename = "$zid"_"$n".mol2
      break
    endif
   end
   endif
   mv –v $f $filename
end

위의 명령을 실행하고 싶습니다. 지난 이틀 동안 이 문제를 해결하려고 노력했지만 실패했습니다. 매번 첫 번째 단계에서는

foreach f (tmp*)

그것은 말한다

bash : syntax near unexpected error '(' 

나는 Linux에 대한 지식이 전혀 없으며 튜토리얼에서 본 것을 따랐습니다. 내 문제를 어떻게 해결할 수 있나요?

답변1

@Archemar가 올바르게 지적했듯이 이것은 기본 Linux 쉘에서 실행되지 않는 cshell 스크립트입니다.

데비안에서 다음을 수행하면:

apt-get install tcsh

스크립트의 첫 번째 줄에 다음을 추가합니다.

#!/bin/tcsh

답변2

귀하가 참조하는 튜토리얼은 csh전체적으로 셸을 사용하지만 귀하는 이를 실행하기 위해 셸을 사용하려고 합니다 bash(받는 오류 메시지에서 알 수 있듯이).

이 두 셸의 구문은 매우 다르며 스크립트를 실행하는 데 서로 바꿔서 사용할 수 없습니다. 두 개의 독립적인 프로그래밍 언어로 생각하세요.

  • 스크립트에 #!/bin/csh첫 번째 줄이 있는지 확인하세요(그리고 그 이후에는 아무것도 없었습니다. 튜토리얼에서 같은 줄에 즉시 주석이 있는 스크립트를 발견했는데 이는 잘못된 것입니다).

  • chmod +x script.cshscript.csh스크립트가 포함된 파일의 이름은 다음 명령을 실행하여 스크립트가 실행 가능한지 확인하십시오.

  • 실행 스크립트를 사용하십시오 ./script.csh.

또는:

  • 인터프리터에 스크립트를 명시적으로 제공하여 스크립트를 실행합니다 csh script.csh.

분명히, csh시스템에 설치되어 있지 않은 경우 먼저 이를 처리해야 합니다. Unix에서 사용하는 패키지 관리자에 따라 다양한 방법으로 이 작업을 수행할 수 있습니다.

csh대부분의 사람들이 기본값을 Unices bash, 일부 ksh-variant 또는 기타 sh호환 가능한 셸로 전환하기 때문에 요즘 셸에 대한 스크립팅을 보는 것은 매우 드뭅니다. 특히 무료 Unices에서는 더욱 그렇습니다.

Tom Christiansen(Perl 담당자)이 1994년에 기사를 썼는데 몇 년 전에는 더 자주 인용되었지만 지금은 덜 자주 인용되었습니다(아마도 많은 사용자가 단순히 알지 못하기 때문일 것입니다).존재하다쉘 이외의 모든 것과 호환 가능 sh). 제목은 "유해한 것으로 간주되는 CSH 프로그래밍".

관련 정보