for FILE in /data/intervals/*.txt; do
ID=echo ${FILE}
/data/bin/Tool -a /data/check.txt -b ${FILE} > /data/final/Outputed_${ID}
done
,并提供:
-bash: /data/intervals/CT.BP.200.txt: Permission denied
-bash: /data/final/Outputed_${ID}: ambiguous redirect
-bash: /data/intervals/CT.BP.500.txt: Permission denied
-bash: /data/final/Outputed_${ID}: ambiguous redirect
-bash: /data/intervals/CT.BP.50.txt: Permission denied
-bash: /data/final/Outputed_${ID}: ambiguous redirect
....
等
我无法发现任何拼写错误。有人可以帮我这个吗?
答案 0 :(得分:3)
ID=echo ${FILE}
不做你认为它做的事情。它实际上将ID
环境变量设置为值echo
,然后尝试执行 ${FILE}
,因此权限被拒绝。
如果您想根据ID
设置FILE
,则需要以下内容之一:
ID=$(echo ${FILE} | sed 'some sed command here')
ID=$(basename ${FILE})
或者,如果您只想将其设置为FILE
本身:
ID=${FILE}
但是,在这种情况下,ID
可能是不必要的,你可以这样做:
for FILE in /data/intervals/*.txt; do
/data/bin/Tool -a /data/check.txt -b ${FILE} > /data/final/Outputed_${FILE}
done
答案 1 :(得分:-1)
for FILE in /data/intervals/*.txt; do /data/bin/Tool -a /data/check.txt -b ${FILE} > /data/final/Outputed_${FILE}; done
我认为您想为/ data / intervals目录中的每个文件.txt执行工具,并将您的流程输出到自定义Output_my.CT.BP.200.txt
或...你想从文件名e中提取ID并在输出中使用它吗?
for FILE in /data/intervals/*.txt; do IDFILE=$(echo $FILE | cut -d'.' -f3); /data/bin/Tool -a /data/check.txt -b ${FILE} > /data/final/Outputed_${IDFILE}; done
我正在使用cut for quick-and-dirty解决方案,你可以使用其他系统(awk,sed,perl)