Executar aplicativo.

Iniciado por daniel_ls, 30 de Março de 2010, 00:00

tópico anterior - próximo tópico

daniel_ls

Boa noite.
Gostaria de saber como é possível executar um arquivo que foi escrito em script para UNIX no UBUNTU.

O executável do aplicativo tem o seguinte corpo:

#Thomas Sourmail, Cambridge University / Neuromat Ltd

echo "*******************************************************"
echo "* Model to estimate the elongation (%) of a steel                    *"
echo "* as a function of elemental composition, heat and                  *"
echo "* mechanical treatments and grain size.                                 *"  
echo "*                                                                                     *"
echo "* More information: www.msm.cam.ac.uk/map/                     *"
echo "*                                                                                     *"
echo "* Model prepared with the Model Manager, Neuromat Ltd          *"
echo "* More information:       www.neuromat.co.uk                        *"
echo "*                                                                                     *"
echo "* Authors: T.C.Illingworth, T.Sourmail, H. Bhadeshia                *"
echo "*          and D.J.C. MacKay                                                  *"
echo "*******************************************************"
echo "Press Return to continue"
read dummy

echo "*******************************************************"
echo "*                                                                                     *"
echo "* DISCLAIMER: This program, is provided AS IS without            *"
echo "* warranty of any kind. We make no warranties, express          *"
echo "* or implied, that this program, procedures and data                *"
echo "* are free of error, or are consistent with any parti-                 *"
echo "* cular standard of merchantability, or that they                      *"
echo "* will meet your requirements for any particular                      *"
echo "* application.                                                                     *"
echo "* IT SHOULD NOT BE RELIED ON FOR SOLVING A PROBLEM        *"
echo "* WHOSE INCORRECT SOLUTION COULD RESULT IN INJURY TO  *"
echo "* A PERSON OR LOSS OF PROPERTY.                                      *"
echo "*                                                                                     *"
echo "* If you do use this program, it is at your own risk.                 *"
echo "* The Department of Materials Science and Metallurgy,             *"
echo "* University of Cambridge, and the National Physical               *"
echo "* Laboratory disclaim all liability for direct, inci-                     *"
echo "* dental or consequential damages resulting from your             *"
echo "* use of this program.                                                         *"
echo "*                                                                                     *"
echo "*******************************************************"
echo ""
echo "Agree ? (y/*)"
read answer

correct='y'

if test $answer != $correct
   then
   exit
fi
#To normalise the data
wc test.dat > wc.out
read line total dummy < wc.out
rm wc.out

no_of_lines=$line
let no_of_columns=$total/$line

cmd='echo $line > no_of_rows.dat'
eval $cmd

echo ""
echo "I found $no_of_lines lines and $no_of_columns variables" > predict.log
echo ""

.normalise $no_of_lines $no_of_columns >&-

# Count again in case the first line contained labels

wc norm_test.in > wc.out
read line total dummy < wc.out
rm wc.out
no_of_lines=$line
echo "Now $no_of_lines line in norm_test.in" >> predict.log

# This is to produce the required instruction file for generate44

.generate_spec $no_of_columns $no_of_lines $no_of_lines 1 $no_of_lines spec.t1 norm_test.in  d/outran.x >&-

# The list of models making up the committee, you can edit that if you wish
# to remove the contribution of some models (just place a # in front of the two
# corresponding lines)

.generate44 spec.t1  13 ./c/_wm6f ./c/_wm6f.lu >&-
mv _out outprdt/out1
.generate44 spec.t1  17 ./c/_wq6f ./c/_wq6f.lu >&-
mv _out outprdt/out2
.generate44 spec.t1  14 ./c/_wn6f ./c/_wn6f.lu >&-
mv _out outprdt/out3
.generate44 spec.t1  14 ./c/_wn3f ./c/_wn3f.lu >&-
mv _out outprdt/out4

# Combining the individual models into committee result

.gencom 4 $no_of_lines ./outprdt >&-

#To un-normalise the result

.treatout $no_of_lines $no_of_columns

mv com.dat outprdt/com.dat
#mv test.dat outprdt/test.dat
#mv unnorm_com result

rm _* no_of_rows.dat norm_test.in spec.t1

echo "Display results ? (y/*)"
read answer
if test $answer = $correct
   then
   cat result
fi
echo "*******************************"
echo "*                                              *"
echo "*     Predictions done                   *"
echo "*   results saved in 'result'            *"
echo "*                                              *"
echo "*******************************"


Quando executo o programa com o comando sh model.gen, recebo a seguinte mensagem:

*******************************************************
* Model to estimate the elongation (%) of a steel                    *
* as a function of elemental composition, heat and                  *
* mechanical treatments and grain size.                                *
*                                                                                     *
* More information: www.msm.cam.ac.uk/map/                     *
*                                                                                    *
* Model prepared with the Model Manager, Neuromat Ltd         *
* More information:       www.neuromat.co.uk                       *
*                                                                                    *
* Authors: T.C.Illingworth, T.Sourmail, H. Bhadeshia               *
*          and D.J.C. MacKay                                                 *
*******************************************************
Press Return to continue

*******************************************************
*                                                                                     *
* DISCLAIMER: This program, is provided AS IS without            *
* warranty of any kind. We make no warranties, express         *
* or implied, that this program, procedures and data               *
* are free of error, or are consistent with any parti-                *
* cular standard of merchantability, or that they                     *
* will meet your requirements for any particular                     *
* application.                                                                    *
* IT SHOULD NOT BE RELIED ON FOR SOLVING A PROBLEM       *
* WHOSE INCORRECT SOLUTION COULD RESULT IN INJURY TO  *
* A PERSON OR LOSS OF PROPERTY.                                     *
*                                                                                    *
* If you do use this program, it is at your own risk.                *
* The Department of Materials Science and Metallurgy,            *
* University of Cambridge, and the National Physical               *
* Laboratory disclaim all liability for direct, inci-                     *
* dental or consequential damages resulting from your            *
* use of this program.                                                        *
*                                                                                     *
*******************************************************

Agree ? (y/*)
y
wc: test.dat: Arquivo ou diretório não encontrado
/home/usr/Área de Trabalho/YS/model.gen: linha 56: let: no_of_columns=/: erro de sintaxe: operando esperado (token com erro é "/")


/home/usr/Área de Trabalho/YS/model.gen: linha 65: .normalise: comando não encontrado
wc: norm_test.in: Arquivo ou diretório não encontrado
/home/usr/Área de Trabalho/YS/model.gen: linha 77: .generate_spec: comando não encontrado
/home/usr/Área de Trabalho/YS/model.gen: linha 83: .generate44: comando não encontrado
mv: impossível obter estado de `_out': Arquivo ou diretório não encontrado
/home/usr/Área de Trabalho/YS/model.gen: linha 85: .generate44: comando não encontrado
mv: impossível obter estado de `_out': Arquivo ou diretório não encontrado
/home/usr/Área de Trabalho/YS/model.gen: linha 87: .generate44: comando não encontrado
mv: impossível obter estado de `_out': Arquivo ou diretório não encontrado
/home/usr/Área de Trabalho/YS/model.gen: linha 89: .generate44: comando não encontrado
mv: impossível obter estado de `_out': Arquivo ou diretório não encontrado
/home/usr/Área de Trabalho/YS/model.gen: linha 94: .gencom: comando não encontrado
/home/usr/Área de Trabalho/YS/model.gen: linha 98: .treatout: comando não encontrado
mv: impossível obter estado de `com.dat': Arquivo ou diretório não encontrado
rm: não foi possível remover `_*': Arquivo ou diretório não encontrado
rm: não foi possível remover `norm_test.in': Arquivo ou diretório não encontrado
rm: não foi possível remover `spec.t1': Arquivo ou diretório não encontrado
Display results ? (y/*)

/home/usr/Área de Trabalho/YS/model.gen: linha 108: test: =: esperado operador unário
*******************************
*                                              *
*     Predictions done                   *
*   results saved in 'result'            *
*                                              *
*******************************


Já adicionei ao cabeçario #!/bin/bash e apenas #/bin/bash, mas não funcionou.

Caso vocês precisem do link de onde baixei esse programa, lá vai:
http://www.msm.cam.ac.uk/map/steel/programs/ys.html#down

Desde já agradeço a ajuda de todos.
Fiquem com DEUS.

HelderC

Cara, como as próprias mensagens de erro dizem: "Arquivo ou diretório não encontrado".
O fato de serem comandos para UNIX não quer dizer que não vão rodar no Ubuntu, já que o Ubuntu é uma distribuição Linux.

Tota

Citação de: HelderC online 02 de Abril de 2010, 19:27
Cara, como as próprias mensagens de erro dizem: "Arquivo ou diretório não encontrado".
O fato de serem comandos para UNIX não quer dizer que não vão rodar no Ubuntu, já que o Ubuntu é uma distribuição Linux.

Só para lembrar, HelderC, se o script foi compilado em bash ele vai funcionar em qualquer sistema que use o bash como shell, mesmo sendo para Unix, se o shell for o mesmo tem que funcionar.

Então, é necessário se saber para qual shell o script foi escrito, mas caso não se saiba basta adaptar.


daniel_ls, você está tentando executar o script de qual lugar, da area de trabalho?

Está executando como usuário ou como root?

veja que:

Citar
wc: test.dat: Arquivo ou diretório não encontrado

O certo é você rodar o script a partir de sua pasta /home ou tentar executar como root.

Citar/home/usr/Área de Trabalho/YS/model.gen: linha 77: .generate_spec: comando não encontrado

Não existe o diretório /usr dentro de /home no Ubuntu

Executar de => Área de Trabalho nem sempre funciona, pois o Linux não entende palavras com espaços, já "Área de Trabalho"  entre as aspas faz ele entender que Área de Trabalho seja uma palavra só e interpreta corretamente.

Resumindo:

Rode o script de dentro de sua /home

Conforme forem aparecendo os erros crie as pastas necessárias

com calma, deve funcionar.

[],s

HelderC

Ok Tota, obrigado pelos esclarecimentos....  ;)

Tota

Vale a pena perder um tempinho aqui => http://www.vivaolinux.com.br/artigo/Uma-introducao-ao-shell-%28parte-1%29/

É bem bacana. ( pelo menos para o nerd aqui que escreve estas linhas...)

[],s

daniel_ls

Consegui resolver o problema pessoal...
Vou postar aqui a solução porque pode ser que alguem um dia venha a precisar...

Observemos primeiro as seguinte partes do código:

.normalise $no_of_lines $no_of_columns >&-

.generate_spec $no_of_columns $no_of_lines $no_of_lines 1 $no_of_lines spec.t1 norm_test.in  d/outran.x >&-

.generate44 spec.t1  13 ./c/_wm6f ./c/_wm6f.lu >&-
mv _out outprdt/out1
.generate44 spec.t1  17 ./c/_wq6f ./c/_wq6f.lu >&-
mv _out outprdt/out2
.generate44 spec.t1  14 ./c/_wn6f ./c/_wn6f.lu >&-
mv _out outprdt/out3
.generate44 spec.t1  14 ./c/_wn3f ./c/_wn3f.lu >&-
mv _out outprdt/out4

.gencom 4 $no_of_lines ./outprdt >&-

.treatout $no_of_lines $no_of_columns


Ao fazer uma pequena análise do código, podemos ver que essas partes são chamadas do programa a ler os arquivos contidos nesses diretórios.
Sendo que a maneira com que o Unix ler uma pasta de diretórios é diferente da meneira que o Linux ler. A única distribuição que compreende códigos em script de Unix sem precisar alterar nenhuma parte do código é a Slackware.

O Unix compreende chamadas de diretórios com a adição de um ponto final antes do arquivo desejado como vocês podem ver... .generate44
Já o Linux compreende chamadas de diretórios com a adição de um ponto final e uma barra: ./.generate44

Com essas explicações, basta que alteremos o código para que fique da seguinte maneira:


#Thomas Sourmail, Cambridge University / Neuromat Ltd

echo "*******************************************************"
echo "* Model to estimate the elongation (%) of a steel                    *"
echo "* as a function of elemental composition, heat and                  *"
echo "* mechanical treatments and grain size.                                 *" 
echo "*                                                                                     *"
echo "* More information: www.msm.cam.ac.uk/map/                     *"
echo "*                                                                                     *"
echo "* Model prepared with the Model Manager, Neuromat Ltd          *"
echo "* More information:       www.neuromat.co.uk                        *"
echo "*                                                                                     *"
echo "* Authors: T.C.Illingworth, T.Sourmail, H. Bhadeshia                *"
echo "*          and D.J.C. MacKay                                                  *"
echo "*******************************************************"
echo "Press Return to continue"
read dummy

echo "*******************************************************"
echo "*                                                                                     *"
echo "* DISCLAIMER: This program, is provided AS IS without            *"
echo "* warranty of any kind. We make no warranties, express          *"
echo "* or implied, that this program, procedures and data                *"
echo "* are free of error, or are consistent with any parti-                 *"
echo "* cular standard of merchantability, or that they                      *"
echo "* will meet your requirements for any particular                      *"
echo "* application.                                                                     *"
echo "* IT SHOULD NOT BE RELIED ON FOR SOLVING A PROBLEM        *"
echo "* WHOSE INCORRECT SOLUTION COULD RESULT IN INJURY TO  *"
echo "* A PERSON OR LOSS OF PROPERTY.                                      *"
echo "*                                                                                     *"
echo "* If you do use this program, it is at your own risk.                 *"
echo "* The Department of Materials Science and Metallurgy,             *"
echo "* University of Cambridge, and the National Physical               *"
echo "* Laboratory disclaim all liability for direct, inci-                     *"
echo "* dental or consequential damages resulting from your             *"
echo "* use of this program.                                                         *"
echo "*                                                                                     *"
echo "*******************************************************"
echo ""
echo "Agree ? (y/*)"
read answer

correct='y'

if test $answer != $correct
    then
   exit
fi
#To normalise the data
wc test.dat > wc.out
read line total dummy < wc.out
rm wc.out

no_of_lines=$line
let no_of_columns=$total/$line

cmd='echo $line > no_of_rows.dat'
eval $cmd

echo ""
echo "I found $no_of_lines lines and $no_of_columns variables" > predict.log
echo ""

./.normalise $no_of_lines $no_of_columns >&-

# Count again in case the first line contained labels

wc norm_test.in > wc.out
read line total dummy < wc.out
rm wc.out
no_of_lines=$line
echo "Now $no_of_lines line in norm_test.in" >> predict.log

# This is to produce the required instruction file for generate44

./.generate_spec $no_of_columns $no_of_lines $no_of_lines 1 $no_of_lines spec.t1 norm_test.in  d/outran.x >&-

# The list of models making up the committee, you can edit that if you wish
# to remove the contribution of some models (just place a # in front of the two
# corresponding lines)

./.generate44 spec.t1  13 ./c/_wm6f ./c/_wm6f.lu >&-
mv _out outprdt/out1
./.generate44 spec.t1  17 ./c/_wq6f ./c/_wq6f.lu >&-
mv _out outprdt/out2
./.generate44 spec.t1  14 ./c/_wn6f ./c/_wn6f.lu >&-
mv _out outprdt/out3
./.generate44 spec.t1  14 ./c/_wn3f ./c/_wn3f.lu >&-
mv _out outprdt/out4

# Combining the individual models into committee result

./.gencom 4 $no_of_lines ./outprdt >&-

#To un-normalise the result

./.treatout $no_of_lines $no_of_columns

mv com.dat outprdt/com.dat
#mv test.dat outprdt/test.dat
#mv unnorm_com result

rm _* no_of_rows.dat norm_test.in spec.t1

echo "Display results ? (y/*)"
read answer
if test $answer = $correct
    then
    cat result
fi
echo "*******************************"
echo "*                                              *"
echo "*     Predictions done                   *"
echo "*   results saved in 'result'            *"
echo "*                                              *"
echo "*******************************"


Espero que essa minha explicação tenha ficado clara... Mas eu lembro que posso estar errado. Se alguem tiver uma forma melhor ou até mais correta e completa do que a minha me avise por favor.

Desde já agradeço a ajuda e compreensão de todos.

Xterminator

#6
Na verdade meu caro amigo, você pode utilizar qualquer shell que quiser em qualquer distro, o slackware por padrão se eu ainda me lembro traz o csh,  e que eu saiba um script quando faz referência ao shell chama por #!/bin/sh que geralmente é um link simbólico para o shell padrão do sistema que poderia muito bem ser um dos milhares de A (ash) a Z(zsh) ou pasmem creio eu até o Powershell que acompanha os novos produtos da Microsoft.
Isto por questões de compatibilidade POSIX, e como já disse anteriormente em alguns lugares aqui do fórum
a maioria dos sistemas GNU/Linux não adicionam o diretório atual no $PATH, logicamente se você quiser adicionar fica a seu critério, pois se ele não está lá deve ser por um bom motivo não acha?
então da próxima vez porque não experimenta fazer como na compilação de programas ;-)

edson@Zumbi:~/Downloads/teste/YS$./model.gen

*******************************************************
* Model to estimate the elongation (%) of a steel     *
* as a function of elemental composition, heat and    *
* mechanical treatments and grain size.               *
*                                                     *
* More information: www.msm.cam.ac.uk/map/            *
*                                                     *
* Model prepared with the Model Manager, Neuromat Ltd *
* More information:       www.neuromat.co.uk          *
*                                                     *
* Authors: T.C.Illingworth, T.Sourmail, H. Bhadeshia  *
*          and D.J.C. MacKay                          *
*******************************************************
Press Return to continue

*******************************************************
*                                                     *
* DISCLAIMER: This program, is provided AS IS without *
* warranty of any kind. We make no warranties, express*
* or implied, that this program, procedures and data  *
* are free of error, or are consistent with any parti-*
* cular standard of merchantability, or that they     *
* will meet your requirements for any particular      *
* application.                                        *
* IT SHOULD NOT BE RELIED ON FOR SOLVING A PROBLEM    *
* WHOSE INCORRECT SOLUTION COULD RESULT IN INJURY TO  *
* A PERSON OR LOSS OF PROPERTY.                       *
*                                                     *
* If you do use this program, it is at your own risk. *
* The Department of Materials Science and Metallurgy, *
* University of Cambridge, and the National Physical  *
* Laboratory disclaim all liability for direct, inci- *
* dental or consequential damages resulting from your *
* use of this program.                                *
*                                                     *
*******************************************************

Agree ? (y/*)
y




 CREATING 'spec.t1' ........
-----------------------------------------------
    Generating outputs using network
-----------------------------------------------
-----------------------------------------------
    Generating outputs using network
-----------------------------------------------
-----------------------------------------------
    Generating outputs using network
-----------------------------------------------
-----------------------------------------------
    Generating outputs using network
-----------------------------------------------


You have not precised the name of the minmax and data files
Using MINMAX and com.dat by default
4 39 MINMAX
160.6175991124.322998
Display results ? (y/*)
y
Prediction Error Pred-Err Pred+Err
372.627014 122.571762 250.055252 495.198761
387.139435 115.390228 271.749207 502.529663
399.405487 109.249504 290.155975 508.654999
409.364410 104.132217 305.232208 513.495667
*******************************
*                             *
*     Predictions done        *
*   results saved in 'result' *
*                             *
*******************************




daniel_ls

Xterminator, eu tinha colocado antes o comando de chamada de shell #!/bin/bash no código. Mas não obtive resultado.
Você se importaria em me mostrar o seu código do executável alterado?

Desde já agradeço.

Xterminator

#8
Citação de: daniel_ls online 06 de Abril de 2010, 15:40
Xterminator, eu tinha colocado antes o comando de chamada de shell #!/bin/bash no código. Mas não obtive resultado.
Você se importaria em me mostrar o seu código do executável alterado?

Desde já agradeço.

Não fiz nenhuma alteração no código nem coloquei a chamada do shell, simplesmente executei do jeito mostrado.
ou seja de dentro do diretório YS que é criado depois de descompactado o arquivo
você executa ./model.gen simples assim.

daniel_ls

Cara, pois fiz isso e o programa não rodou de forma alguma!

Será que não é nenhuma biblioteca ou algum complemento de programa que falta?

Xterminator

Nops,
faz assim antes de executar.

export PATH=$PATH:.

e veja se executa, se não executar ai não sei dizer qual o seu problema ;-)