rtmetz92 Posted April 6, 2012 Report Share Posted April 6, 2012 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 Link to comment Share on other sites More sharing options...
bsccara Posted April 6, 2012 Report Share Posted April 6, 2012 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. Link to comment Share on other sites More sharing options...
rtmetz92 Posted April 6, 2012 Author Report Share Posted April 6, 2012 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 😉 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now