この簡単なスクリプトを試してみると:
#!/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.
私は何を間違っていますか?
交換
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
"も必要です。ただし、これはこのエラーメッセージを生成するものではありません。
コードで次の変更を行う必要があります。
#!/bin/bash
#append csv
FILES=/some_path/*
for f in $FILES
do
cat $f >> ~/test.txt
done
FILE 行のパスの前にある空白を削除することを忘れないでください。
ステートメント区切り文字がありません: 次のように修正します
for f in $FILES do
cat $f >> ~/test.txt
done
または
for f in $FILES do
cat $f >> ~/test.txt; done
ファイル名に空白が含まれていると、問題が発生することに注意してください。で変数をfor
反復処理する場合、その変数内の空白で区切られた単語を反復処理しています。名前にスペースが含まれているかどうかに関係なく、ファイルを安全に反復するには、ファイルのリストをプレーンな変数に格納しないでください。
最も簡単な方法:
for f in /home/stef/test/*; do
# ...
ファイル名をある種のコンテナに保持したい場合は、配列を使用する必要があります。
files=( /home/stef/test/* )
for f in "${files[@]}"; do
# ...