globのある変数に基づくスクリプトでは、rmまたはwgetが失敗します。

globのある変数に基づくスクリプトでは、rmまたはwgetが失敗します。

rmファイル名 glob またはwget.

Ubuntu 16.04では、次のことを行いました。

set -a
export drt="/var/www/html"
export pma="[pP][hH][pP][mM][yY][aA][dD][mM][iI][nN]"
set +a
echo $drt # Got the above.
echo $pma # Got the above.

その後、実行可能スクリプト(~/myScripts/tp_pma.sh)を実行しました。

#!/bin/bash
rm -rf ${drt}/${pma}*
wget -P ${drt} https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip
unzip ${drt}/${pma}*.zip
mv ${drt}/${pma}*/ ${drt}/phpmyadmin/
rm ${drt}/${pma}*.zip

スクリプトが部分的に成功しました。

  1. 最初の操作がrm成功した可能性があり、以下の問題がすべて発生した可能性があります。
  2. 部分的に成功しましたwget。新しいPMAのコピーを含むzipファイルdrt
  3. 私はうまくいき、unzipzipを解凍し、最新のphpmyadminディレクトリを入手しました。
  4. 失敗しましたmv(下記のエラーを参照)。ディレクトリがphpMyAdmin-4.7.7-all-languages自分のホームディレクトリに残っているため、期待どおりにディレクトリが移動されず、名前も変更されませdrtん。phpmyadmin
  5. 最後のrm成功 - 私のホームディレクトリからzipが削除されました。

frエラーは発生しませんwget

そしてpmaなぜか値がphpMyAdmin-4.7.7-all-languages。私はそれをその値に変えませんでした。

ここで何が失敗する可能性があり、その理由は何ですか?

ベストアンサー1

使用したコマンドは、アーカイブがある場所ではなく、実行中のディレクトリにunzipアーカイブを抽出します。unzipまず、アーカイブを含むディレクトリに変更するか、次を使用できます。-dオプション:

[-d exdir]
ファイルを抽出するオプションのディレクトリです。デフォルトでは、すべてのファイルとサブディレクトリは現在のディレクトリに再作成されます。

おそらくchdirオプションを選択します。

#!/bin/bash
cd "$drt"
rm -r ${pma}*
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip
unzip phpMyAdmin-latest-all-languages.zip
mv ${pma}*/ phpmyadmin/
rm phpMyAdmin-latest-all-languages.zip

pmaまた、「値が何とか変更されました」と言ったとき、引用符なしで変数を使用するとphpMyAdmin-4.7.7-all-languagesファイル名パターンとして使用されますので、パターンと一致するファイルがあればecho $pma*既存ファイルの名前が表示されますのでご注意ください。

(大文字と小文字の区別モードが必要かどうかはわかりません。名前の形式がから変更されると予想する現実的な理由はありますかphpMyAdminphpmyadmin

おすすめ記事