1

この簡単なスクリプトを試してみると:

#!/bin/bash
#append csv

FILES= /home/stef/test/*

for f in $FILES do
        cat $f >> ~/test.txt done

次のエラーが表示されます。

./append.sh: line 4: /home/stef/test/test2.txt: Permission denied.

私は何を間違っていますか?

4

4 に答える 4

5

交換

FILES= /home/stef/test/*

FILES=/home/stef/test/*

スクリプトは、/ home / stef / test/*の最初の一致を評価しようとしています。ファイルが実行可能ではないため、許可が拒否されたと表示されます。

./append.sh: line 4: /home/stef/test/test2.txt: Permission denied.

それは4行目FOO= *です。空でないディレクトリで試してみてください。

また、for ... do; done構文も中断されdone、区切り文字(;または改行)が必要であり、" do"も必要です。ただし、これはこのエラーメッセージを生成するものではありません。

于 2012-09-14T10:17:28.800 に答える
2

コードで次の変更を行う必要があります。

#!/bin/bash
#append csv

FILES=/some_path/*

for f in $FILES
do
        cat $f >> ~/test.txt
done

FILE 行のパスの前にある空白を削除することを忘れないでください。

于 2012-09-14T10:09:47.133 に答える
0

ステートメント区切り文字がありません: 次のように修正します

for f in $FILES do
        cat $f >> ~/test.txt 
done

または

for f in $FILES do
        cat $f >> ~/test.txt; done
于 2012-09-14T10:20:36.693 に答える
0

ファイル名に空白が含まれていると、問題が発生することに注意してください。で変数をfor反復処理する場合、その変数内の空白で区切られた単語を反復処理しています。名前にスペースが含まれているかどうかに関係なく、ファイルを安全に反復するには、ファイルのリストをプレーンな変数に格納しないでください。

最も簡単な方法:

for f in /home/stef/test/*; do
  # ...

ファイル名をある種のコンテナに保持したい場合は、配列を使用する必要があります。

files=( /home/stef/test/* )
for f in "${files[@]}"; do
  # ...
于 2012-09-14T13:37:50.993 に答える