以下bash
ubuntu 14.04
会提示用户输入,然后请求在select
中使用该文件。但是,我只能选择其中一个文件,因为只有1个已标记,但目录中有3个。但是,如果我在输入之前放置select
文件,则bash
似乎有效。我似乎无法修复它,出了什么问题?感谢。
击
# enter gene input
printf "%s \n" "Please enter gene(s), use a comma between multiple:"
OLDIFS=$IFS
IFS=","
read -a genes
for (( i = 0; i < ${#genes[@]}; i++ ))
do
printf "%s\n" "${genes[$i]}" >> /home/cmccabe/Desktop/NGS/panels/GENE.bed
done
# select file
printf "please select a file to analyze with entered gene or genes \n"
select file in $(cd /home/cmccabe/Desktop/NGS/API/test/bedtools;ls);do break;done
echo $file "will be used to filter reads, identify target bases and genes less than 20 and 30 reads, create a low coverage bed for vizulization, and calculate 20x and 30x coverage for the entered gene(s)"
logfile=/home/cmccabe/Desktop/NGS/API/test/process.log
for file in /home/cmccabe/Desktop/NGS/API/test/bedtools/$file; do
echo "Start selcted file creation: Panel: ${FUNCNAME[0]} Date: $(date) - File: $file"
bname=$(basename $file)
pref=${bname%%.txt}
echo "End selected file creation: $(date) - File: $file"
done >> "$logfile"
显示在终端
1) 12_newheader_base_counts.txt
34_newheader_base_counts.txt
56_newheader_base_counts.txt
所需的终端显示
1) 12_newheader_base_counts.txt
2) 34_newheader_base_counts.txt
3) 56_newheader_base_counts.txt
答案 0 :(得分:3)
预先修改IFS
会破坏select
考虑您的目录列表的方式:使用IFS=,
,它现在正在查找由,
分隔的项目,而您{ {1}}的输出由换行符分隔。
您应该在ls
之前将IFS
恢复为之前的值(IFS=$OLDIFS
)。
此外,我建议使用shell globing而不是列出子shell的输出:
select
答案 1 :(得分:2)
好像你将IFS值保存到OLDIFS但是你没有恢复它。您在select命令中使用的扩展要求将IFS恢复为其默认值。