Renamed log level vars and added some debug messages.
This commit is contained in:
212
img-helpr.sh
212
img-helpr.sh
@@ -6,6 +6,7 @@
|
|||||||
## wird in der Zwischenablage abgelegt.
|
## wird in der Zwischenablage abgelegt.
|
||||||
## Author swg, janeemussja.de, November 2013
|
## Author swg, janeemussja.de, November 2013
|
||||||
## letzte Änderungen
|
## letzte Änderungen
|
||||||
|
## - Februar 2024, Version 1.08, logger function replaced with bash snipped
|
||||||
## - März 2023, Version 1.07, which_is Funktion repariert
|
## - März 2023, Version 1.07, which_is Funktion repariert
|
||||||
## - Juni 2021, Version 1.06, Progress bar eingebaut
|
## - Juni 2021, Version 1.06, Progress bar eingebaut
|
||||||
## - Januar 2021, Version 1.05, Test auf fehlende Software geändert.
|
## - Januar 2021, Version 1.05, Test auf fehlende Software geändert.
|
||||||
@@ -15,21 +16,42 @@
|
|||||||
## MODIFY AND SHARE AS YOU LIKE!
|
## MODIFY AND SHARE AS YOU LIKE!
|
||||||
|
|
||||||
# Log levels for messages
|
# Log levels for messages
|
||||||
LLMUTE=0
|
LLMute=0
|
||||||
LLERROR=1
|
LLMdtry=1 # mandatory: messages that are always written to the log (except mute)
|
||||||
LLWARNING=2
|
LLError=2
|
||||||
LLINFO=3
|
LLWarning=3
|
||||||
LLDEBUG=4
|
LLInfo=4
|
||||||
# Actual log level of the logger used
|
LLDebug=5
|
||||||
LOGLEVEL=$LLDEBUG
|
## Actual log level of the logger used
|
||||||
|
Log_Level=$LLInfo
|
||||||
|
|
||||||
# Write log of the script
|
## base name of the logging script.
|
||||||
|
Log_Name="${0##*/}";
|
||||||
|
|
||||||
|
## Write log of the script.
|
||||||
|
## $1 Loglevel to log the message with.
|
||||||
|
## $2 message to log.
|
||||||
function logger() {
|
function logger() {
|
||||||
LOGGINGLEVEL=$1;
|
local _logging_level=$1;
|
||||||
LOGMESSAGE=$2;
|
local _log_message=$2;
|
||||||
if [ $LOGLEVEL -ge $LOGGINGLEVEL ];
|
if [[ $Log_Level -lt $_logging_level ]]; then
|
||||||
then
|
return;
|
||||||
echo ${LOGMESSAGE};
|
fi
|
||||||
|
local _now=$($DATE +%Y%m%d_%H:%M:%S);
|
||||||
|
if [[ $_logging_level -eq $LLInfo ]]; then
|
||||||
|
_type=" Info:";
|
||||||
|
elif [[ $_logging_level -eq $LLError ]]; then
|
||||||
|
_type=" ERROR!";
|
||||||
|
elif [[ $_logging_level -eq $LLWarning ]]; then
|
||||||
|
_type=" Warning:";
|
||||||
|
elif [[ $_logging_level -eq $LLDebug ]]; then
|
||||||
|
_type=" DEBUG:";
|
||||||
|
else
|
||||||
|
_type=":";
|
||||||
|
fi
|
||||||
|
printf "$Log_Name ${_now}${_type} ${_log_message}\n" >> $Log_File;
|
||||||
|
if [[ $Log_Level -eq $LLDebug ]]; then
|
||||||
|
printf "${_now}${_type} ${_log_message}\n";
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,104 +69,73 @@ exec 3>&-
|
|||||||
exec 4>&-
|
exec 4>&-
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## Returns the binaries full path if existent.
|
||||||
function which_is() {
|
function which_is() {
|
||||||
declare -n RETVAL=$1;
|
declare -n _ret_val=$1; # declare RETVAL a reference of $1
|
||||||
EXECUTABLE=$2;
|
local _executable=$2;
|
||||||
WITHFULLPATH=$(which ${EXECUTABLE} 2>/dev/null);
|
local _with_full_path=$(which ${_executable} 2>/dev/null);
|
||||||
if [ -x "$WITHFULLPATH" ];
|
if [ -x "$_with_full_path" ]; then
|
||||||
then
|
_ret_val="$_with_full_path";
|
||||||
RETVAL="$WITHFULLPATH";
|
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
RETVAL="$EXECUTABLE not found!";
|
_ret_val="$_executable not found!";
|
||||||
return 1;
|
return 1;
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Was wir am Anfang brauchen
|
# Was wir am Anfang brauchen
|
||||||
PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/global/bin:/global-common/scripts:/usr/sfw/bin:/opt/sfw/bin:/usr/ccs/bin:/usr/xpg4/bin:/opt/SUNWspro/bin:/usr/dt/bin:/usr/openwin/bin:/usr/ucb:/opt/bin
|
PATH=$PATH:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
|
||||||
|
|
||||||
## Prüfen der notwendigen Software auf Existenz und Ausführbarkeit
|
|
||||||
# zenity
|
|
||||||
|
|
||||||
which_is MSGDIALOG 'zenity';
|
|
||||||
if [[ "$?" != "0" ]];
|
|
||||||
then
|
|
||||||
echo "$MSGDIALOG not found, aborting";
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# imagemagick
|
|
||||||
which_is CONVERT 'convert';
|
|
||||||
if [[ "$?" != "0" ]];
|
|
||||||
then
|
|
||||||
echo "$CONVERT not found, aborting";
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# imagemagick
|
|
||||||
which_is IMGDISPLAY 'display';
|
|
||||||
if [[ "$?" != "0" ]];
|
|
||||||
then
|
|
||||||
echo "$IMGDISPLAY not found, aborting";
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# date
|
|
||||||
which_is DATE 'date';
|
|
||||||
if [[ "$?" != "0" ]];
|
|
||||||
then
|
|
||||||
echo "$DATE not found, aborting";
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# exiftool
|
|
||||||
which_is EXIFTOOL 'exiftool';
|
|
||||||
if [[ "$?" != "0" ]];
|
|
||||||
then
|
|
||||||
echo "$EXIFTOOL not found, aborting";
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# xclip
|
|
||||||
which_is XCLIP 'xclip';
|
|
||||||
if [[ "$?" != "0" ]];
|
|
||||||
then
|
|
||||||
echo "$XCLIP not found, aborting";
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# printf
|
|
||||||
which_is PRINTF 'printf';
|
|
||||||
if [[ "$?" != "0" ]];
|
|
||||||
then
|
|
||||||
echo "$PRINTF not found, aborting";
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# sed
|
|
||||||
which_is SED 'sed';
|
|
||||||
if [[ "$?" != "0" ]];
|
|
||||||
then
|
|
||||||
echo "$SED not found, aborting";
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
SCRIPTNAME=$(echo $0 | sed -e 's/.*\///g');
|
SCRIPTNAME=$(echo $0 | sed -e 's/.*\///g');
|
||||||
VERSION="1.07";
|
VERSION="1.08";
|
||||||
VERS=1.07;
|
|
||||||
ME=$(whoami);
|
ME=$(whoami);
|
||||||
TMPPFAD=/tmp;
|
TMPPFAD=/tmp;
|
||||||
MYHOME=$(echo ~);
|
MYHOME=$(echo ~);
|
||||||
USTRICH="_";
|
USTRICH="_";
|
||||||
|
|
||||||
|
## Prüfen der notwendigen Software auf Existenz und Ausführbarkeit
|
||||||
|
# date
|
||||||
|
which_is DATE 'date';
|
||||||
|
if [ $? != 0 ]; then echo "$DATE not found, aborting"; exit 1; fi
|
||||||
|
|
||||||
|
## Logfile in nextcloud to have a visible result.
|
||||||
|
Run_Date=$($DATE +%Y_%m_%d)
|
||||||
|
Log_File="$MYHOME/${Run_Date}_${Log_Name}.log";
|
||||||
|
touch $Log_File;
|
||||||
|
logger $LLInfo "Path: $PATH";
|
||||||
|
|
||||||
|
# zenity
|
||||||
|
which_is MSGDIALOG 'zenity';
|
||||||
|
if [ $? != 0 ]; then logger $LLError "$MSGDIALOG not found, aborting"; exit 1; fi
|
||||||
|
|
||||||
|
# imagemagick
|
||||||
|
which_is CONVERT 'convert';
|
||||||
|
if [ $? != 0 ]; then logger $LLError "$CONVERT not found, aborting"; exit 1; fi
|
||||||
|
|
||||||
|
# imagemagick
|
||||||
|
which_is IMGDISPLAY 'display';
|
||||||
|
if [ $? != 0 ]; then logger $LLError "$IMGDISPLAY not found, aborting"; exit 1; fi
|
||||||
|
|
||||||
|
# exiftool
|
||||||
|
which_is EXIFTOOL 'exiftool';
|
||||||
|
if [ $? != 0 ]; then logger $LLError "$EXIFTOOL not found, aborting"; exit 1; fi
|
||||||
|
|
||||||
|
# xclip
|
||||||
|
which_is XCLIP 'xclip';
|
||||||
|
if [ $? != 0 ]; then logger $LLError "$XCLIP not found, aborting"; exit 1; fi
|
||||||
|
|
||||||
|
# printf
|
||||||
|
which_is PRINTF 'printf';
|
||||||
|
if [ $? != 0 ]; then logger $LLError "$PRINTF not found, aborting"; exit 1; fi
|
||||||
|
|
||||||
|
# sed
|
||||||
|
which_is SED 'sed';
|
||||||
|
if [ $? != 0 ]; then logger $LLError "$SED not found, aborting"; exit 1; fi
|
||||||
|
|
||||||
exec 3> >($MSGDIALOG --notification --listen)
|
exec 3> >($MSGDIALOG --notification --listen)
|
||||||
# The PID of zenity is needed to kill the process at the end of the script
|
# The PID of zenity is needed to kill the process at the end of the script
|
||||||
ZenityPID=$!;
|
ZenityPID=$!;
|
||||||
#((ZenityPID=ZenityPID+1)) # this is a workaround as I don't know how to get the PID of zenity (but get the one of exec)
|
|
||||||
echo "tooltip:Script ${SCRIPTNAME}, Version ${VERSION}" >&3
|
echo "tooltip:Script ${SCRIPTNAME}, Version ${VERSION}" >&3
|
||||||
#$(logger 3 "Script ${SCRIPTNAME}, Version ${VERSION}");
|
logger $LLDebug "Script ${SCRIPTNAME}, Version ${VERSION}.";
|
||||||
if [ ! $# -gt 0 ]; then
|
if [ ! $# -gt 0 ]; then
|
||||||
echo "img-helpr, Version: $VERSION, June 2021"
|
echo "img-helpr, Version: $VERSION, June 2021"
|
||||||
echo "Syntax: img-helpr.sh IMG_FILE1 [IMG_FILE2 ...]";
|
echo "Syntax: img-helpr.sh IMG_FILE1 [IMG_FILE2 ...]";
|
||||||
@@ -155,6 +146,7 @@ fi;
|
|||||||
## Nutzerdaten
|
## Nutzerdaten
|
||||||
USERDATAFILE=$MYHOME/.img_helpr;
|
USERDATAFILE=$MYHOME/.img_helpr;
|
||||||
|
|
||||||
|
## If userdatafile does not exist create one with default values.
|
||||||
if [[ -f $USERDATAFILE ]]; then
|
if [[ -f $USERDATAFILE ]]; then
|
||||||
source $USERDATAFILE;
|
source $USERDATAFILE;
|
||||||
else
|
else
|
||||||
@@ -164,25 +156,26 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -d "$local_blog_path" ]; then
|
if [ ! -d "$local_blog_path" ]; then
|
||||||
echo "Lokaler Speicherpfad ($local_blog_path) für die Bilder existiert nicht!";
|
logger $LLError "Lokaler Speicherpfad ($local_blog_path) für die Bilder existiert nicht!";
|
||||||
exit 1;
|
exit 1;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
## Aus den übergebenen Argumenten die Dateien rausklauben
|
## Aus den übergebenen Argumenten die Dateien rausklauben
|
||||||
## Leerzeichen behandeln:
|
## Leerzeichen behandeln:
|
||||||
|
logger $LLDebug "Taking care of spaces in file names.";
|
||||||
ARGS="$*";
|
ARGS="$*";
|
||||||
INP_C=0;
|
INP_C=0;
|
||||||
INP_TEMP="";
|
INP_TEMP="";
|
||||||
for INP in $ARGS
|
for INP in $ARGS
|
||||||
do
|
do
|
||||||
#echo "INP ist: $INP";
|
logger $LLDebug "INP ist: $INP";
|
||||||
INP_TEMP="$INP_TEMP$INP";
|
INP_TEMP="$INP_TEMP$INP";
|
||||||
if [ -f "$INP_TEMP" ]; then
|
if [ -f "$INP_TEMP" ]; then
|
||||||
FILE[$INP_C]="$INP_TEMP"; #echo "Arrayinhalt an der Stelle $INP_C: ${FILE[$INP_C]}";
|
FILE[$INP_C]="$INP_TEMP";
|
||||||
|
logger $LLDebug "Content of File[$INP_C]: ${FILE[$INP_C]}";
|
||||||
((INP_C=INP_C+1));
|
((INP_C=INP_C+1));
|
||||||
INP_TEMP="";
|
INP_TEMP="";
|
||||||
else
|
else
|
||||||
echo "Fehler: $?"
|
|
||||||
INP_TEMP="$INP_TEMP ";
|
INP_TEMP="$INP_TEMP ";
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -194,9 +187,8 @@ declare -A EXIFDATETIMELIST; # nimmt das Aufnahmedatum + Uhrzeit des Originals
|
|||||||
MAX_INP_C=$INP_C;
|
MAX_INP_C=$INP_C;
|
||||||
for((INP_C=0;INP_C<${#FILE[*]};INP_C++));
|
for((INP_C=0;INP_C<${#FILE[*]};INP_C++));
|
||||||
do
|
do
|
||||||
#echo "Bearbeite: ${FILE[$INP_C]}";
|
logger $LLDebug "Bearbeite: ${FILE[$INP_C]}";
|
||||||
#echo "Preview: $local_blog_path/preview.jpg";
|
logger $LLDebug "Preview: $local_blog_path/preview.jpg";
|
||||||
# Mögliches Vorschaubild aus exif holen und anzeigen
|
|
||||||
$EXIFTOOL -b -W "$local_blog_path/preview.jpg" -preview:PreviewImage "${FILE[$INP_C]}";
|
$EXIFTOOL -b -W "$local_blog_path/preview.jpg" -preview:PreviewImage "${FILE[$INP_C]}";
|
||||||
if [ -f "$local_blog_path/preview.jpg" ]; then # Wenn exifvorschau existierte: Anzeigen
|
if [ -f "$local_blog_path/preview.jpg" ]; then # Wenn exifvorschau existierte: Anzeigen
|
||||||
origOrient=$($EXIFTOOL -s -s -s -n -Orientation "${FILE[$INP_C]}");
|
origOrient=$($EXIFTOOL -s -s -s -n -Orientation "${FILE[$INP_C]}");
|
||||||
@@ -214,7 +206,7 @@ do
|
|||||||
DATETIMEORIGINAL=$($EXIFTOOL -DateTimeOriginal -S "${FILE[$INP_C]}" | $SED -e 's/DateTimeOriginal:\ //');
|
DATETIMEORIGINAL=$($EXIFTOOL -DateTimeOriginal -S "${FILE[$INP_C]}" | $SED -e 's/DateTimeOriginal:\ //');
|
||||||
## Datum alternativ von heute nehmen
|
## Datum alternativ von heute nehmen
|
||||||
if [[ -z "${OUT_PATH_Y##?([-+])+([0-9])}" ]] || [[ -z "${OUT_PATH_M##?([-+])+([0-9])}" ]] || [[ -z "${OUT_DAY##?([-+])+([0-9])}" ]]; then
|
if [[ -z "${OUT_PATH_Y##?([-+])+([0-9])}" ]] || [[ -z "${OUT_PATH_M##?([-+])+([0-9])}" ]] || [[ -z "${OUT_DAY##?([-+])+([0-9])}" ]]; then
|
||||||
echo "Kein Datum in Exif gefunden (Jahr=$OUT_PATH_Y, Monat=$OUT_PATH_M, Tag=$OUT_DAY)";
|
logger $LLWarning "Kein Datum in Exif gefunden (Jahr=$OUT_PATH_Y, Monat=$OUT_PATH_M, Tag=$OUT_DAY)";
|
||||||
OUT_PATH_Y=$(date +%Y);
|
OUT_PATH_Y=$(date +%Y);
|
||||||
OUT_PATH_M=$(date +%m);
|
OUT_PATH_M=$(date +%m);
|
||||||
OUT_DAY=$(date +%d);
|
OUT_DAY=$(date +%d);
|
||||||
@@ -240,7 +232,7 @@ do
|
|||||||
while [ -z "${FILENAME}" ]
|
while [ -z "${FILENAME}" ]
|
||||||
do
|
do
|
||||||
FILENAME=$($MSGDIALOG --entry --title "Dateiname" --text "Welchen Dateinamen soll das Bild bekommen?" --entry-text="$OUT_DAY$USTRICH" 2> /dev/null);
|
FILENAME=$($MSGDIALOG --entry --title "Dateiname" --text "Welchen Dateinamen soll das Bild bekommen?" --entry-text="$OUT_DAY$USTRICH" 2> /dev/null);
|
||||||
if [ "$?" -eq "1" ]; then # Es wurde Abbruch geklickt, Script endet:
|
if [ $? -eq 1 ]; then # Es wurde Abbruch geklickt, Script endet:
|
||||||
kill $IMGDISPLAYPID;
|
kill $IMGDISPLAYPID;
|
||||||
CleanUp;
|
CleanUp;
|
||||||
exit 1;
|
exit 1;
|
||||||
@@ -295,22 +287,22 @@ exec 4> >(${MSGDIALOG} --progress --title="${SCRIPTNAME} ($FILECOUNT files)" --p
|
|||||||
PROGRESS=0;
|
PROGRESS=0;
|
||||||
## Wenn keine Logindaten hinterlegt sind, muss das Script nur noch die exif-Daten schreiben
|
## Wenn keine Logindaten hinterlegt sind, muss das Script nur noch die exif-Daten schreiben
|
||||||
if [ -z "${SSH_LOGIN}" ]; then
|
if [ -z "${SSH_LOGIN}" ]; then
|
||||||
#echo "nur exif setzen";
|
logger $LLDebug "No ssh upload, just setting exif.";
|
||||||
while [ ${#FILELIST[@]} -gt 0 ] # solange noch CONVERTPIDs vorhanden sind
|
while [ ${#FILELIST[@]} -gt 0 ] # solange noch CONVERTPIDs vorhanden sind
|
||||||
do
|
do
|
||||||
for CPID in "${!FILELIST[@]}";
|
for CPID in "${!FILELIST[@]}";
|
||||||
do
|
do
|
||||||
if [ -n "${CPID}" -a -d "/proc/${CPID}" ]; then
|
if [ -n "${CPID}" -a -d "/proc/${CPID}" ]; then
|
||||||
# Prozess läuft noch, hochladen noch nicht möglich
|
logger $LLDebug "Process $CPID still running, exif postphoned.";
|
||||||
sleep 2;
|
sleep 2;
|
||||||
else
|
else
|
||||||
# Konvertierung beendet, kann exif schreiben
|
logger $LLDebug "${FILELIST[${CPID}]} converted, doing exif.";
|
||||||
echo "# Setting exif ${FILELIST[${CPID}]}" >&4
|
echo "# Setting exif ${FILELIST[${CPID}]}" >&4
|
||||||
((PROGRESS++))
|
((PROGRESS++))
|
||||||
echo $(( ($PROGRESS*100/$MAX_INP_C)-1 )) >&4
|
echo $(( ($PROGRESS*100/$MAX_INP_C)-1 )) >&4
|
||||||
$EXIFTOOL -overwrite_original -DateTimeOriginal="${EXIFDATETIMELIST[${CPID}]}" ${FILELIST[${CPID}]};
|
$EXIFTOOL -overwrite_original -DateTimeOriginal="${EXIFDATETIMELIST[${CPID}]}" ${FILELIST[${CPID}]};
|
||||||
$EXIFTOOL -overwrite_original -OriginalFileName="${EXIFORIGINALLIST[${CPID}]##*/}" ${FILELIST[${CPID}]};
|
$EXIFTOOL -overwrite_original -OriginalFileName="${EXIFORIGINALLIST[${CPID}]##*/}" ${FILELIST[${CPID}]};
|
||||||
#echo "tooltip:Argumente: ${EXIFORIGINALLIST[${CPID}]##*/}" >&3 # DEBUG!
|
logger $LLDebug "tooltip:Argumente: ${EXIFORIGINALLIST[${CPID}]##*/}";
|
||||||
unset FILELIST["${CPID}"];
|
unset FILELIST["${CPID}"];
|
||||||
unset EXIFDATETIMELIST["${CPID}"];
|
unset EXIFDATETIMELIST["${CPID}"];
|
||||||
unset EXIFORIGINALLIST["${CPID}"];
|
unset EXIFORIGINALLIST["${CPID}"];
|
||||||
@@ -326,14 +318,14 @@ fi
|
|||||||
## Hochladen der Bilder aufs Blog
|
## Hochladen der Bilder aufs Blog
|
||||||
while [ ${#FILELIST[@]} -gt 0 ] # solange noch CONVERTPIDs vorhanden sind
|
while [ ${#FILELIST[@]} -gt 0 ] # solange noch CONVERTPIDs vorhanden sind
|
||||||
do
|
do
|
||||||
#echo "Länge Liste: ${#FILELIST[@]}";
|
logger $LLDebug "Länge Liste: ${#FILELIST[@]}";
|
||||||
for CPID in "${!FILELIST[@]}";
|
for CPID in "${!FILELIST[@]}";
|
||||||
do
|
do
|
||||||
if [ -n "${CPID}" -a -d "/proc/${CPID}" ]; then
|
if [ -n "${CPID}" -a -d "/proc/${CPID}" ]; then
|
||||||
# Prozess läuft noch, hochladen noch nicht möglich
|
logger $LLDebug "Process $CPID still running, exif and upload postphoned.";
|
||||||
sleep 2;
|
sleep 2;
|
||||||
else
|
else
|
||||||
#echo "Konvertierung beendet, kann exif und hochladen";
|
logger $LLDebug "${FILELIST[${CPID}]} converted, doing exif and upload.";
|
||||||
echo "# Setting exif ${FILELIST[${CPID}]}" >&4
|
echo "# Setting exif ${FILELIST[${CPID}]}" >&4
|
||||||
((PROGRESS++))
|
((PROGRESS++))
|
||||||
echo $(( ($PROGRESS*25/$MAX_INP_C)-1 )) >&4
|
echo $(( ($PROGRESS*25/$MAX_INP_C)-1 )) >&4
|
||||||
@@ -352,7 +344,7 @@ do
|
|||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
sleep 5;
|
sleep 2;
|
||||||
echo "100" >&4 # trigger auto-close of progressbar
|
echo "100" >&4 # trigger auto-close of progressbar
|
||||||
CleanUp;
|
CleanUp;
|
||||||
exec 4>&-
|
exec 4>&-
|
||||||
|
|||||||
Reference in New Issue
Block a user