Jump to content
rtmetz92

Pequeno problema num Shell Script

Recommended Posts

rtmetz92

Boas,

O tal problema consiste no facto de eu não conseguir correr determinado programa sem estar no directório desse mesmo executável. Ou seja, correr o programa directamente através da variável PATH, cujo caminho desse ficheiro (do tal programa) foi adicionado previamente.

Vou apresentar o shell script que tenho:

Já agora, os argumentos são ./<nome do script> <directorio do ficheiro> <nome do executável>

no directório do ficheiro, é necessário que no fim leve uma barra "/", por exemplo /home/user/Documents/ (esta última barra deve ser escrita).

O problema está no ponto 6 do código do script. O que ele faz é adicionar o caminho do ficheiro que quero executar à $PATH e depois tento executar o ficheiro através da variável (e não através de ir ao directório através do comando cd).

O que está a faltar no script para o ficheiro correr directamente através da $PATH?

EDIT: Isto funciona bem no MAC de um colega meu mas no meu Fedora 16 está a dar o tal problema

#!/bin/bash

FILE="$2" #Caminho para o ficheiro
DIRECTORY="$1" #Ficheiro

if [ -z $DIRECTORY ]; then	 #Não introduziu o caminho
echo "Não introduziu o caminho!"
exit 1 #Erro
elif [ -z $FILE ]; then #Não introduziu o nome do programa
echo "Não introduziu o nome do programa!"
exit 2 #Erro
else
echo "Caminho: $1" #Mostra o primeiro argumento
echo "Comando: $2" #Mostra o segundo argumento

#1 - Executar o ficheiro no caminho especificado
echo "1.	Executa o ficheiro utilizando o caminho e o nome:"
if [ -f "$DIRECTORY"/"$FILE" ]
then
    "$DIRECTORY"/"$FILE"
else
    echo "$FILE Ficheiro não existente"
    exit 3
fi

#2 - Ir para o directório especificado
echo "2.	Muda-se para o directório especificado no caminho:"
pushd "$DIRECTORY"

#Verificar valor da errorlevel
if [ "$?" != "0" ]; then
	exit 4
fi

ACTUAL="$(pwd)" #Guarda o caminho actual

#3 - Executar o ficheiro apenas pelo nome
echo "3.	Executa o ficheiro utilizando apenas o nome:"
./"$FILE"

#Verificar valor da errorlevel
if [ "$?" != "0" ]; then
	exit 5
fi

#4  - Voltar ao directório original
echo "4.	Retorna ao directório original:"
popd #Volta para o directório anterior

#Verificar valor da errorlevel
if [ "$?" != "0" ]; then
	exit 6
fi

#5 - Acrescentar ficheiro à var. $PATH 
echo "5.	Acrescenta à variável PATH o caminho:"
ORIGDIR=$PATH #Copia do actual PATH
export PATH=$PATH:$ACTUAL/ #Muda o actual path
echo $PATH
#Verificar valor da errorlevel
if [ "$?" != "0" ]; then
	exit 7
fi

#6 - Abrir ficheiro directamente da PATH
echo "6.	Executa o ficheiro utilizando apenas o nome:"
"$FILE"

#Verificar valor da errorlevel
if [ "$?" != "0" ]; then
	exit 8
fi

#7 - Reposição da var. PATH
echo "7.	Repõe o valor da variável PATH:"
export PATH=$ORIGDIR #Repõe o valor de PATH

#Verificar valor da errorlevel
if [ "$?" != "0" ]; then
	exit 9
fi
fi
exit 0 #Não encontrou erros

Um abraço e obrigado

Share this post


Link to post
Share on other sites
bsccara

Se meteres o caminho na linha de comando não consegues executar o programa ? Por exemplo, '/home/user/Documents/Aexecutar', estando noutra directoria que não '/home/user/Documents' e sendo 'Aexecutar' o executável ?

A variável PATH apenas é usada para procurar executáveis (binários ou 'scripts'). Um programa que seja encontrado pela PATH continua a receber uma variável PWD igual à directoria de onde foi executado.

Share this post


Link to post
Share on other sites
rtmetz92

Boas,

Também já tinha tentado isso e não surtiu nenhum efeito. O mais interessante é que ontem funcionou na perfeição mas hoje já não. Para além disso, funcionou no MAC de um colega meu, mas no meu SO linux (Fedora 16 em máquina virtual) deu esse tal problema. Vou ver se dou mais umas voltas ao código e depois vou dando notícias.

Desde já, muito obrigado pela ajuda e disponibilidade ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.