1

ローカル フラッシュ ドライブにファイルを作成し、ファイルがいっぱいになるまでランダム データを書き込むスクリプトを bash (初心者) で作成しました。次に、ファイルを外部 USB ドライブにコピーし、ローカル ファイルを削除します。ファイルがいっぱいになり、USB ドライブにあると、ローカルの NAND フラッシュにコピーされ、削除され、USB フラッシュ ドライブから再度コピーされます (ユーザーが停止するか、エラーが発生するまで、無期限に繰り返されます)。最初 - これは while ループにあります)。スクリプトを実行すると、次のように表示されます。

nand_test.sh: line 19: /tmp/activity.log: Text file busy
nand_test.sh: line 19: /tmp/activity.log: Text file busy
nand_test.sh: line 19: /tmp/activity.log: Text file busy
nand_test.sh: line 19: /tmp/activity.log: Text file busy

そしてただそこにぶら下がっています。私のスクリプトにエラーがあるかどうか教えてもらえますか? bashに関しては、私は非常に緑色です。以下はコードです:

LOG="/tmp/activity.log"

function if_error
{
if [[ $? -ne 0 ]]
then
  print "$1 TIME:$TIME" | tee -a $LOG
  exit $?

fi
}




#whenever the echo command is ran this function allows me add a timestamp

function echo {
  /bin/echo `date` $* | $LOG
}

#condition below checks if activity.log exists. If not, it creates it.

mydir="/media/myusb"
chmod +x /tmp/activity.log
activity="/tmp/activity.log"

if [ -e "$activity" ];then
  echo -    "$activity" LOG ALREADY EXISTS >> "$activity"

else
  > /activity.log
  #echo -    "$activity" LOG HAS BEEN CREATED >> "$activity"

fi

#condition below checks if myusb directory is created. If not, it creates it.

if [ -d "$mydir" ];then
  echo -    "$mydir" ALREADY EXISTS >> "$activity"

else
  mkdir /media/myusb
 #echo -     "$mydir" HAS BEEN CREATED >> "$activity"

fi

#check if external usb has been mounted. if not mount it.
device0="/dev/sda1"

if [ -b "$device0" ];then
  echo -    "$device0" IS ALREADY MOUNTED >> "$activity"
else
  mount LABEL=MYFLASH /media/myusb
 #echo -    "$device0" HAS BEEN MOUNTED >> "$activity"
fi


#condition below checks if testfile.txt has been created. If not, it creates it.

testfile="/storage/testfile.txt"

if [ -e "$testfile" ];then
  echo -    "$testfile" FILE ALREADY EXISTS >> "$activity"

else
  >> /storage/testfile.txt
  #echo -    "$testfile" HAS BEEN CREATED! >> "$activity"

fi


dd if=/dev/urandom of=/storage/testfile.txt >> "$activity"
ret=$?
if_error "urandom data failed writing to testfile.txt"

if [ "$ret" gt 0 ];then
  echo -    "NAND FLASH DATA TEST FAILED >> "$activity"
else
  cp "$testfile" "$mydir"
fi

rm "$testfile"
sync
sleep 3

while [ -e "/media/myusb/testfile.txt" ]
do
 cp /media/myusb/testfile.txt /storage
 sync
 DIFF= diff /media/myusb/testfile.txt "$testfile"
 if [ "$DIFF" != "" ];then
   echo -    "ERROR: THE FILE HAS BEEN MODIFIED" >> "$activity"

 else
   echo -    "FILE COMPARISON SUCCESSFUL" >> "$activity"
 fi
 rm "$testfile"
 sync
4

1 に答える 1

1

上部に次の行があります。

LOG="/tmp/activity.log"

その後:

/bin/echo `date` $* | $LOG

ファイル名だけでなく、パイプの後に有効な Unix コマンドが必要なため、意味がありません。

于 2013-04-24T13:36:55.680 に答える