Como você cria e executa um script bash que chama um executável da pasta mais alta?

2

Estou tentando escrever um script muito simples que chama um executável de uma pasta de nível superior. Se eu estivesse apenas digitando o comando no console, eu digitaria

../filenamehere {options} {parameters}

Quando tento fazer a mesma coisa em um arquivo .sh para executar vários processos ao mesmo tempo, tento escrever o seguinte:

../filename {options} {parameters} &
../filename {options2} {parameters} &
../filename {options3} {parameters} &
../filename {options4} {parameters} &

Então, para executar o arquivo, eu inseri

chmod a+x script_file.sh
./script_file.sh

Após esse ponto, recebi um erro "command not found" 3 vezes. Suponho que isso significa que 1 dos meus 4 comandos foi executado, mas os outros 3 não. Se eu digitar diretamente no console exatamente os mesmos comandos que eu coloquei no arquivo .sh, nada vai dar errado. O que preciso fazer para executar este arquivo?

    
por Teofrostus 29.10.2013 / 07:27

4 respostas

1

Você pode tentar executar seu script com pwd antes de chamar o executável para ver se o seu script está alterando o diretório depois de executar o primeiro executável.

pwd
../filename {options} {parameters} &
pwd
../filename {options2} {parameters} &
pwd
../filename {options3} {parameters} &
pwd
../filename {options4} {parameters} &
    
por 29.10.2013 / 16:00
1

Você está usando links simbólicos?

Para escrever scripts confiáveis, você não deve estar usando "dirname $ 0". Relaciona-se ao comando $ 0, que está relacionado ao comando de chamada. Se você estiver navegando pelos diretórios, use "readlink -f $ 0".

basedir="$(dirname $(readlink -f $0))"
$basedir/../filename {options} {parameters} &

readlink -f fornecerá o caminho absoluto do seu script, independentemente do link, workdir, etc ...

    
por 22.10.2014 / 17:40
0

Parece que o que você precisa saber é a localização atual do seu script, independentemente de como ele é chamado (com um caminho absoluto, um caminho relativo ou via $ PATH do shell). Depois de saber disso, você pode referenciar seu outro executável por meio de um caminho relativo ao local atual.

Você pode obter a localização atual do script em execução com o seguinte:

MYLOC='dirname $0'

... e, em seguida, execute seu executável relativo usando essa variável:

$MYLOC/../filename

Isso funciona independentemente do diretório de trabalho atual (por exemplo, $ pwd) e até funciona se o seu script for encontrado e executado via $ PATH do shell ... desde que o script seja executado por um caminho absoluto ou relativo, $ 0 tem o valor associado ... ou, se o script for executado procurando o $ PATH do shell, $ 0 contém o caminho completo e absoluto para o arquivo de script.

    
por 30.10.2013 / 02:19
-1

Você provavelmente alterará o diretório de trabalho atual quando estiver usando ../filename . Então, é melhor usar no seu script_file.sh as seguintes linhas:

current_directory=$(pwd)
../filename {options} {parameters} &
cd $current_directory
../filename {options2} {parameters} &
cd $current_directory
../filename {options3} {parameters} &
cd $current_directory
../filename {options4} {parameters} &

Isso lhe dará, com certeza, o resultado esperado.

    
por 29.10.2013 / 09:58