/ / Jak zaktualizować skrypt basha za pomocą starej wersji tego skryptu? - linux, bash, shell

Jak zaktualizować skrypt basha za pomocą starej wersji tego skryptu? - linux, bash, shell

Mam skrypt bash dla linuksa, który ma parametr do aktualizacji samego skryptu. Moim problemem jest to, że skrypt nie może się aktualizować, gdy jest używany. Cóż .. Czy ktoś ma rozwiązanie?

Obecnie próbuję zaktualizować skrypt w następujący sposób:

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

Ale skrypt otrzymuje następujący błąd:

    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

Mam nadzieję, że ktoś może mi pomóc. Z góry dziękuję!

Odpowiedzi:

1 dla odpowiedzi № 1

Wygląda na to, że Twój błąd pochodzi z wieloznacznej nazwy pliku bez cudzysłowów. Bash najpierw robi globbing i zastępuje * z dużą ilością nazw plików, a następnie uruchamia się rozpakować z tymi parametrami. Próbować master.zip "TS3UpdateScript-master/*" -x "TS3UpdateScript-master/configs/" .

Wtedy wystąpi problem z uruchomieniem nowej wersji skryptu zamiast starej działającej. Myślę, że powinno to być zrobione w ten sposób:

#!/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 dla odpowiedzi nr 2

Dzięki za pomoc i pomysły! "Przekazałem" kod do innego skryptu, który zawiera następujący kod:

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