bash: sintaxe perto de erro inesperado '(' [fechado]

2

Estou seguindo um tutorial em microbiologia computacional:

Na página 10, há ex01.csh que contém (recuo original sem recuo adicionado pelos participantes do 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

Eu quero executar o comando acima. Eu tenho tentado descobrir isso nos últimos 2 dias, mas falhei. Toda vez, no primeiro passo, que é

foreach f (tmp*)

diz

bash : syntax near unexpected error '(' 

Eu sei zero sobre coisas do Linux, e estou apenas seguindo o que eu vejo no tutorial. Como posso resolver meu problema?

    
por Ashfaq 07.07.2016 / 11:56

2 respostas

2

Como o @Archemar aponta corretamente, este é um script cshell, não deve ser executado no shell padrão do Linux.

Se no Debian:

apt-get install tcsh

E adicione como primeira linha do seu script:

#!/bin/tcsh
    
por 07.07.2016 / 12:04
2

O tutorial que você cita está usando o csh shell por completo, mas você está tentando executá-lo usando o bash shell (é óbvio a partir da mensagem de erro que você obtém).

Os dois shells têm uma sintaxe muito diferente e não podem ser usados de forma intercambiável para executar um script. Pense neles como duas linguagens de programação separadas.

  • Certifique-se de que o script tenha #!/bin/csh como sua primeira linha (e nada mais depois disso, vi um script no tutorial com um comentário imediatamente na mesma linha, o que está errado).

  • Verifique se o script é executável emitindo o comando chmod +x script.csh (onde script.csh é o nome do arquivo que contém o script).

  • Execute o script com ./script.csh .

Alternativamente:

  • Execute o script, fornecendo explicitamente o intérprete com csh script.csh .

Obviamente, se csh não estiver instalado em seu sistema, você terá que lidar com isso primeiro. Isso é feito de maneiras diferentes, dependendo do gerenciador de pacotes usado pelo seu Unix.

É bastante raro ver scripts de shell escritos para csh hoje em dia, especialmente nos Unices gratuitos, depois que a maioria mudou sua configuração padrão para bash , alguns ksh -variant ou para algum outro sh concha compatível.

Existe um texto escrito por Tom Christiansen (Perl guy) em 1994 que eu costumava ver referenciado com muito mais frequência há alguns anos, mas não com muita frequência hoje em dia (provavelmente porque muitos usuários simplesmente não sabem sobre o existência de algo diferente de um shell sh -compatible). Ele tem o título " PROGRAMAÇÃO DA CSH CONSIDERADO NOCIVO ".

    
por 07.07.2016 / 15:14

Tags