Lançamentos executáveis se chamados diretamente do terminal, mas não funcionam quando chamados do shell script

3

Eu fiz o download de algum software (chamado samtools ) e ele está armazenado em uma pasta na minha área de trabalho. Então eu adicionei o caminho para o executável na variável de ambiente PATH . Em outras palavras, meu arquivo ~/.bashrc tem a seguinte linha:

export PATH="~/Desktop/samtools/samtools-1.1:$PATH".

O arquivo executável chamado samtools está nesta pasta.

Quando eu tento iniciá-lo pela linha de comando simplesmente digitando samtools , ele funciona. Ele também funciona quando eu uso o caminho completo para o executável.

No entanto, quando tento ativá-lo a partir de um script de shell, ele não é iniciado nem reporta: No such file ou Directory not found .

Alguém pode me ajudar a resolver esse problema?

EDITAR: Como algumas pessoas pediram.

A mensagem de erro exata é:

Realigning using Bowtie2...
./RP_capture//realign/filter_long_inserts.sh: 29: ./RP_capture//realign/filter_long_inserts.sh: samtools: not found
./RP_capture//realign/filter_long_inserts.sh: 29: ./RP_capture//realign/filter_long_inserts.sh: samtools: not found
Could not locate a Bowtie index corresponding to basename "./aux/chr1.fa"

Também adicionei echo $PATH ao meu script e a saída parece correta. O caminho para samtools está lá.

este é o exemplo de uma das muitas chamadas para samtools do script.

samtools index $OUTPUT/realignments/$file.abnormal.realign.bowtie.bam

Eu realmente consegui resolver o problema usando

export set SAMTOOLS_DIR="/home/laba/Desktop/samtools/samtools-1.1"

dentro de um script e, em seguida, chamando samtools assim:

$SAMTOOLS_DIR/samtools [parameters]

Por estranho que pareça, outro script binário chama apenas o fornecimento explícito de caminho para o executável. Sem ter que usar set .

    
por YKY 25.12.2014 / 14:30

2 respostas

1

Definindo a variável de diretório assim:

export set SAMTOOLS_DIR="/home/laba/Desktop/samtools/samtools-1.1"

E depois chamar o exacutable do script assim:

$SAMTOOLS_DIR/samtools [parameters]

resolve o problema

    
por 29.12.2014 / 13:36
0

Tente colocar um echo $ PATH no script, para garantir que o caminho é o que você acha que é, e garantir que o script possa ser executado (bit executável definido, correto shebang #! / bin / sh ou o que for na primeira linha ). Se nada mais funcionar, você pode tentar colocar a chamada de invocação de script.

Atualizar

A partir da mensagem de erro, fica claro que o problema surge em um sub-script, que invoca samtools por conta própria:

./RP_capture//realign/filter_long_inserts.sh at line 29

Então o problema é essa chamada de samtools , que está faltando um PATH ou algum outro componente variável.

Como você descobriu, esse componente é, com toda a probabilidade, SAMTOOLS_DIR .

Outra possibilidade que merece ser investigada é que o problema está no usuário executando o script (por exemplo, via sudo ou algo semelhante). Nesse caso, o valor de PATH definido para "~ / Desktop ...", onde o "~" significa "O usuário doméstico do usuário atual ", significaria dois diferentes coisas para você e para o usuário que está executando o script. Nesse caso, você deve definir o PATH para

/home/laba/Desktop/samtools/samtools-1.1:$PATH

em vez de

~ / Desktop / samtools / samtools-1.1: $ PATH

    
por 25.12.2014 / 21:04