मेरे पास एक लाइनक्स बैश स्क्रिप्ट है, जिसमें स्क्रिप्ट को अपडेट करने के लिए एक पैरामीटर है। मेरी समस्या यह है कि स्क्रिप्ट "स्वयं को अपडेट नहीं कर सकती है, जबकि इसका उपयोग किया जाता है।" अच्छा .. क्या किसी के पास कोई हल है?
वर्तमान में मैं स्क्रिप्ट को निम्नानुसार अपडेट करने का प्रयास करता हूं:
# 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/
लेकिन मुझे स्क्रिप्ट द्वारा निम्न त्रुटि प्राप्त हुई:
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
मुझे आशा है कि किसी के द्वारा मेरी सहायता की जा सकती है। अग्रिम में धन्यवाद!
उत्तर:
उत्तर № 1 के लिए 1ऐसा लगता है कि आपकी त्रुटि बिना उद्धरण के फ़ाइल नाम वाइल्डकार्ड से आती है। बैश पहले ग्लोबिंग करता है और रिप्लेस करता है *
बहुत सारे फ़ाइलनाम के साथ और फिर इस पैरामीटर के साथ अनज़िप चलाता है। प्रयत्न, कोशिश master.zip "TS3UpdateScript-master/*" -x "TS3UpdateScript-master/configs/"
.
फिर पुराने एक के बजाय स्क्रिप्ट के नए संस्करण को चलाने में समस्या होगी। मुझे लगता है कि इसे इस तरह किया जाना चाहिए:
#!/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 № 2
आपकी मदद और विचारों के लिए धन्यवाद! मैंने किसी अन्य स्क्रिप्ट के लिए कोड को "आउटसोर्स" कर दिया है, जिसमें निम्नलिखित कोड हैं:
#!/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