Digite Y para Excluir, se o script estiver sendo executado manualmente

1

Esta é uma questão de 2 partes.

Cenário: Este script está em um cronjob. Se uma pasta não existir, o sistema nos envia um email que abre um ticket que nos informa que a pasta não está disponível. Nós manualmente temos que fazer o login e remover a pasta anterior atm.

Eu gostaria que pudéssemos executar o script manualmente e remover a pasta anterior pressionando "Y" ou continuar pressionando a tecla "Enter", enquanto estiver logado e executar o script manualmente.

Isso é o que eu tenho até agora ...

   #-- 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
    
por needtoknow 02.04.2018 / 20:48

1 resposta

1

Você precisa de algo assim:

#!/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

O script acima é POSIX -compliant e verificado por erros com shellcheck . Ele verificará se ele é executado no modo interactive ou non interactive , possivelmente via cron e agirá de acordo. Eu testei com bash , dash , Busybox ash e FreeBSD .

    
por 02.04.2018 / 21:10