bash输入输入并选择文件

时间:2016-06-20 14:17:41

标签: bash

以下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

2 个答案:

答案 0 :(得分:3)

预先修改IFS会破坏select考虑您的目录列表的方式:使用IFS=,,它现在正在查找由,分隔的项目,而您{ {1}}的输出由换行符分隔。

您应该在ls之前将IFS恢复为之前的值(IFS=$OLDIFS)。

此外,我建议使用shell globing而不是列出子shell的输出:

select

答案 1 :(得分:2)

好像你将IFS值保存到OLDIFS但是你没有恢复它。您在select命令中使用的扩展要求将IFS恢复为其默认值。