Parece um script c-shell. Use
sudo apt-get install csh
e tente executar o script no c-shell. Você pode abrir o c-shell executando csh no bash shell.
Eu não tenho experiência em escrever arquivos .sh. Desejo executar o utilitário pvm2raw de este aplicativo do Biblioteca de volumes .
Eu recebo o seguinte erro ao executar o build.sh no Ubuntu 10.10.
build.shéoseguinte: #makecommand conjuntommfile=V3Makefile setmake="make -f $ mmfile"
set rule=$1
if ($rule == "") set rule="all" // line 16
if ($rule == "deps") then
if ($HOSTTYPE == "iris4d") $make MAKEDEPEND="CC -M" OPTS="-DHAVE_CONFIG_H -DVIEWER_HAVE_DCMTK" TARGET=IRIX depend
if ($HOSTTYPE == "i386") $make MAKEDEPEND="c++ -M -I/usr/X11R6/include" OPTS="-DHAVE_CONFIG_H -DVIEWER_HAVE_DCMTK" TARGET=LINUX depend
O que há de errado aí?
Edit: Eu segui o conselho do kniwor e instalei o csh. Agora recebo o seguinte erro:
Como posso resolver este problema de variável indefinida?
Parece um script c-shell. Use
sudo apt-get install csh
e tente executar o script no c-shell. Você pode abrir o c-shell executando csh no bash shell.
É uma boa forma e reduz a confusão para iniciar todos os scripts shell declarando o shell no qual eles devem ser executados. A primeira linha para um shell Borne (o que você chamou de ".sh") é " #!/bin/sh
". Isso ajuda a remover toda a confusão sobre qual shell, pois cada um tem nuances em sua sintaxe e estrutura de comando.
Para um shell de Borne, o comando if
é mais parecido com isto:
if [$ rule="deps"]; então
# processo baseado em HOSTTYPE
fi
Algumas outras sugestões, podem não ser um problema aqui, mas podem incomodá-lo com o tempo.
1- defina uma convenção de nomenclatura de variável consistente, como todas as maiúsculas, para que você possa ler o código e identificar as variáveis mais facilmente. 2- Use as chaves para se referir a variáveis para que elas não fiquem "confusas". 3- Ao comparar strings, coloque suas variáveis entre aspas também.
Então, vamos alterar a primeira linha de
if ($rule == "") set rule="all"
para
if [ "${rule}XXX" = "XXX" ]; rule="all"
As chaves protegem o confuso com o XXX, essa sintaxe diz o valor da variável "rule" com "XXX" anexado ao final. Portanto, se o resultado for apenas XXX, você saberá que a variável estava vazia ou nula.
Para o hosttype, você pode tentar adicionar outra linha como a regra:
set HOSTTYPE=$2
e, quando você inicia o script, adiciona um segundo parâmetro ao inserir o tipo de host, por exemplo, build.sh deps i386