ファイル名を変更した後、Bashコピーコマンドは機能しません。

ファイル名を変更した後、Bashコピーコマンドは機能しません。

Bashスクリプト内にこのインストーラシェルスクリプトがあります。

  1. 既存のテキストファイルの名前を変更しようとしています(バックアップ中)。
  2. 古いファイルを削除します
  3. 新しいファイルをターゲットディレクトリにコピーする

    mv /target/data.ini /target/data_$(date +"%Y%m%d_%H%M%S").ini       
    rm -f /target/data.ini     
    cp /install/data.ini /target/data.ini
    

何らかの理由で、cpコマンドは常にファイルをコピーするわけではありません。
以前のmvまたはrm操作が完了していない可能性はありますか?

スクリプトの一部として実行されるため、エラーは表示されません。コマンドを手動で実行すると正常に動作します。

ベストアンサー1

コマンドを手動で実行すると正常に動作します。

手がかりがあります。たぶんパスの問題かもしれません。私は何か、特にスクリプトを書くときは、常にコマンドへのパスを含めるのが好きです。

$ which date
/usr/bin/date

次に、スクリプトにエラーチェックを追加します。

if [ -f /target/data.ini ]
then
  # Note spaces separating the parenthesis from the command
  /bin/mv /target/data.ini /target/data_$( /usr/bin/date +"%Y%m%d_%H%M%S" ).ini
  if [ $? -ne 0 ]
  then
     echo "Error on MV command"
     exit
  fi
  else
    echo "Error: Can't find /target/data.ini"
    exit
  fi
  cp /install/data.ini /target/data.ini  
  #Same type of error checking here 

これにより、エラーが解決または明確になります。

おすすめ記事