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

等等

我找不到任何拼写错误。有人可以帮我弄这个吗?

4

2 回答 2

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
于 2012-04-13T07:32:17.583 回答
-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 进行快速而肮脏的解决方案,您可以使用其他系统(awk、sed、perl)

于 2012-04-13T07:40:53.290 回答