如何使用此脚本的旧版本更新bash脚本?

时间:2014-08-25 08:59:18

标签: linux bash shell

我有一个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

我希望,有人可以帮助我。提前谢谢!

2 个答案:

答案 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