我有一个linux bash脚本,它有一个参数来更新脚本self。我的问题是,在使用脚本时,脚本无法自行更新。嗯..有人有解决方案吗?
目前我尝试更新脚本如下:
# 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
我希望,有人可以帮助我。提前谢谢!
答案 0 :(得分:1)
您的错误似乎来自没有引号的文件名通配符。 Bash首先执行globbing并用大量文件名替换*
,然后使用此参数运行解压缩。试试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"
答案 1 :(得分:0)
感谢您的帮助和想法!我已外包"外包"另一个脚本的代码,包含以下代码:
#!/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