スクリプトを手動で実行する場合は、Yを入力して削除します。

スクリプトを手動で実行する場合は、Yを入力して削除します。

これは2部構成の質問です。

シナリオ:スクリプトはcronjobにあります。フォルダがない場合は、システムが電子メールを送信し、フォルダが利用できないことを知らせるチケットを開きます。手動でログインして古いフォルダatmを削除する必要があります。

手動でスクリプトを実行し、「Y」を押して古いフォルダを削除するか、ログインしたまま続行するには、「Enter」を押してスクリプトを手動で実行できることを願っています。

これが私が今まで持っているものです...

   #-- check to see if cache folder exists
   { echo "Checking to see if ...";
   echo "${wDir}/${client%/}/.ftp-vendor-scripts/cache exists ... "; echo ""; } >> "$log"

   if [ ! -d "${wDir}"/"${client%/}"/.ftp-vendor-scripts/cache ]; then
      echo "Directory - ${wDir}/${client%/}/.ftp-vendor-scripts/cache DOES NOT exists - Failed ..." >> "$log";

      if [ ******** this script is being executed manually ******* ]; then
         echo "Would you like to delete the ${wDir}/${client%/}/.ftp-vendor-scripts folder?"
         echo "Press \"Y\" to delete the ${wDir}/${client%/}/.ftp-vendor-scripts."
         echo "Press \"Enter\" to continue without deleting the .ftp-vendor-scripts folder."
      else
         echo "Directory - ${wDir}/${client%/}/.ftp-vendor-scripts/cache DOES NOT exists - Failed ..." | mail -s "${wDir}/${client%/}/.ftp-vendor-scripts/ca$
      fi

   else
      echo "Directory - ${wDir}/${client%/}/.ftp-vendor-scripts/cache exists - Success ..." >> "$log";
   fi

ベストアンサー1

次のようなものが必要です。

#!/usr/bin/env sh

if [ -t 1 ]
then
    interactive=1
else
    interactive=0
fi


if [ "$interactive" -eq 1 ]
then
    printf "interactive\n"

    while true
    do
    printf "Rm directory? "
    read -r reply
    if [ "$reply" = "y" ]
    then
            printf "directory will be removed\n"
            break
    elif [ "$reply" = "n" ]
    then
            printf "directory will not be removed\n"
            break
    else
            printf "Uknown reply - it must be either y or n\n"
    fi
    done

else
    printf "non interactive\n"
fi

上記のスクリプトは互換性があり、POSIX使用されます。または、モードshellcheckで実行していることを確認し、それに応じて動作することもできます。私はそれを、とテストしました。interactivenon interactivecronbashdashBusybox ashFreeBSD

おすすめ記事