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
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
.
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.
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
Tags command-line bash linux shell