/ / Come aggiornare uno script di bash con la vecchia versione di questo script? - linux, bash, shell

Come aggiornare uno script di bash con la vecchia versione di questo script? - linux, bash, shell

Ho uno script di bash linux, che ha un parametro per aggiornare autonomamente lo script. Il mio problema è che lo script non può aggiornarsi, mentre è usato. Bene. Qualcuno ha una soluzione?

Attualmente provo ad aggiornare lo script come segue:

    # Download latest version
wget -q https://github.com/TS3Tools/TS3UpdateScript/archive/master.zip
# Unzip latest version
unzip master.zip TS3UpdateScript-master/* -x TS3UpdateScript-master/configs/ && mv -f TS3UpdateScript-master/* . && rmdir TS3UpdateScript-master/

Ma ricevo il seguente errore dallo script:

    replace TS3UpdateScript-master/LICENSE_GNU_GPL.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
ateScript-master/configs
caution: excluded filename not matched:  TS3UpdateScript-master/configs/
# many arguments

Spero che qualcuno mi possa aiutare. Grazie in anticipo!

risposte:

1 per risposta № 1

Sembra che il tuo errore provenga dal nome jolly del file senza virgolette. Bash fa prima il globbing e lo sostituisce * con un sacco di nomi di file e quindi esegue decomprimere con questi parametri. Provare master.zip "TS3UpdateScript-master/*" -x "TS3UpdateScript-master/configs/" .

Quindi ci sarà un problema con l'esecuzione di una nuova versione di script invece di quella vecchia in esecuzione. Penso che dovrebbe essere fatto in questo modo:

#!/bin/bash

version=4
if [ "$UPDATED" != "$0" ]; then
cp self_update.new.sh self_update.sh
exec env UPDATED="$0" "$0" "$@"
fi
echo "This script"s version is $version"

0 per risposta № 2

Grazie per il tuo aiuto e le tue idee! Ho "esternalizzato" il codice a un altro script, che contiene il seguente codice:

    #!/usr/bin/env bash

sleep 5s

# Download latest version
wget -q https://github.com/TS3Tools/TS3UpdateScript/archive/master.zip
# Unzip latest version
if [[ $(unzip master.zip TS3UpdateScript-master/* -x TS3UpdateScript-master/configs/*) ]]; then
if [ $(cp -Rf TS3UpdateScript-master/* . && rm -rf TS3UpdateScript-master/) ]; then
rm -rf master.zip
exit 1;
fi
else
rm -rf master.zip
exit 0;
fi