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に対してToolを実行し、プロセスをカスタム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

私は迅速で汚い解決策のためにカットを使用しています、あなたは他のシステム(awk、sed、perl)を使うことができます

于 2012-04-13T07:40:53.290 に答える