затем, elif, else утверждение, которое я запрограммировал в скрипте bash. Я знаю, что это работает, потому что я могу запустить ту же команду в интерфейсе терминала и посмотреть, что она делает то, что я хочу. Однако когда я запускаю его в скрипте, он, кажется, всегда переходит к оператору else и ничего не обнаруживает. Кто-нибудь может помочь объяснить, почему это так? Вот мой код скрипта:
if [ -e "$1" ]
then
for line in `samtools view -H $1`
do
if [[ "$line" == *NCBI-Build-36\.1* ]]
then
echo "hg18"
break
elif [[ "$line" == *hg19* ]]
then
echo "hg19"
break
else
echo "Reference was not found, manual entry required: "
read ans
echo "$ans"
break
fi
done
else
echo -e "Usage: \e[1;32mreadRef.sh \e[1;36mbamfile.bam"
fi
Независимо от того, какой файл я подключаю, он всегда переходит к другому и запрашивает у меня ввод вручную.
Вот команда, которую я выполнил на терминале:
for line in `samtools view -H $bignormal`; do if [[ "$line" == *NCBI-Build-36\.1* ]]; then echo "YES - $line"; else echo "NO - $line"; fi; done
И вывод такой:
NO - @HD
NO - VN:1.0
NO - GO:none
NO - SO:coordinate
NO - @SQ
NO - SN:1
NO - LN:247249719
YES - AS:NCBI-Build-36.1
YES - UR:http://www.bcgsc.ca/downloads/genomes/9606/NCBI-Build-36.1/bwa_ind/genome/
NO - SP:Homo
NO - sapiens
.
.
.
Почему скрипт не обнаруживает искомую строку, но находится в терминале?
EDIT:
Я попробовал то, что сказал Чарльз, это вывод:
:+'[' -e /projects/rcorbettprj2/DLBCL/CNV/RG065/normal/A01440_8_lanes_dupsFlagged.bam ']'
::+samtools view -H /projects/rcorbettprj2/DLBCL/CNV/RG065/normal/A01440_8_lanes_dupsFlagged.bam
:+for line in '`samtools view -H $1`'
:+case "$line" in
:+echo 'Reference was not found, manual entry required: '
Reference was not found, manual entry required:
:+read ans