for FILE in Permission denied&模棱两可的重定向

时间:2012-04-13 07:29:31

标签: bash

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
....

我无法发现任何拼写错误。有人可以帮我这个吗?

2 个答案:

答案 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)