Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
redstar78kg
V2EX  ›  Linux

bash file.sh 解压

  •  
  •   redstar78kg · Aug 11, 2020 via Android · 5041 views
    This topic created in 2125 days ago, the information mentioned may be changed or developed.
    有几个文件,一个二进制文件,一个纯文本文件,三个 shell 脚本,分别是 run.sh stop.sh clean.sh

    需求,把这几个文件压缩为一个包,
    名字是 help.sh

    客户拿到文件后
    bash help.sh 即可当前目录解压
    而后当前目录运行 bash run.sh 即可运行。

    用什么方案能做这个 help.sh 压缩包呢?

    我之前用的是 tgz 。
    对方先 tar zxvf help.sh
    而后 cd help
    最后运行 bash run.sh
    但是,还是有人会搞错的。
    22 replies    2020-09-10 00:02:28 +08:00
    ys0290
        1
    ys0290  
       Aug 11, 2020 via iPhone   ❤️ 1
    虽然说后缀不影响使用,但这 help.sh 名字也真是怪。别人为什么会出错?是一点 linux 基础都没有的那种吗?
    nosay
        2
    nosay  
       Aug 11, 2020
    唔,奇怪的问题...不过也可以试着这样做。

    zip -r help.sh ./* && echo '\n unzip help.sh' >> help.sh

    需要客户系统中预装 unzip,也可以写在 help.sh 中给客户装一下。
    soy
        3
    soy  
       Aug 11, 2020
    直接 Bazel 打包成一个.sar 可执行文件 用户也不用管解压啥的 直接运行
    https://docs.bazel.build/versions/3.4.0/be/shell.html#sh_binary
    Death
        4
    Death  
       Aug 11, 2020   ❤️ 3
    xuanbg
        5
    xuanbg  
       Aug 11, 2020
    不明白脚本为啥要压缩?很大吗?
    aloxaf
        6
    aloxaf  
       Aug 11, 2020
    直接把指定行后的内容喂给 gzip 就行了
    snowydec
        7
    snowydec  
       Aug 11, 2020
    进来解压的,告辞
    danyue9528
        8
    danyue9528  
       Aug 11, 2020
    还以为能解压呢,进来发现是真解压。。。
    告辞
    kiwi95
        9
    kiwi95  
       Aug 11, 2020 via iPhone
    二进制直接打到 shell 里面,有的安装包就是这样做的
    msg7086
        10
    msg7086  
       Aug 11, 2020
    你把解压缩代码写在 sh 里啊,然后从脚本尾部把压缩包提取出来解压不就好了。
    redstar78kg
        11
    redstar78kg  
    OP
       Aug 11, 2020 via Android
    多谢各位指点。

    我原来写
    tar zxvf xxx.tgz
    发现用户那边容易搞错。
    你很难想象,对方会大小写不分,随意加空格或者不打空格。

    所以,寻求更为简单的策略。
    尽量让对方,bash 一下就搞定了。

    再次感谢诸位指点。
    redstar78kg
        12
    redstar78kg  
    OP
       Aug 11, 2020 via Android
    @Death 多谢。
    dorothyREN
        13
    dorothyREN  
       Aug 11, 2020
    一个脚本一个 function 不就行了吗
    ivan_wl
        14
    ivan_wl  
       Aug 11, 2020
    xuboying
        15
    xuboying  
       Aug 11, 2020
    文档这么写:
    tar 空格 zxvfk 空格 xxx.tgz 请注意英文字母为全小写,不要开启中文输入法!


    对方是真心不会还是故意刁难你啊
    35aZ4P8mT576683q
        16
    35aZ4P8mT576683q  
       Aug 11, 2020 via Android
    二进制是 executable 吗,如果是,直接在生成这个 executable 的时候包含文本信息,stop, run, clean 就可以以参数的形式来执行。比如 nginx 就是启动 nginx, nginx -s stop 就是停止 nginx
    35aZ4P8mT576683q
        17
    35aZ4P8mT576683q  
       Aug 11, 2020 via Android
    更直接的方式是直接让用户选,假设 executable 叫 dosth, 用户直接输入 dosth, 然后提示 "您想干嘛呢"
    1. 运行 dosth
    2. 终止运行 dosth
    3. Clean
    当然如果 dosth 已经在运行要提示用户,而且不提供 1 选项; 没有运行不提供 2 选项
    MartinWu
        18
    MartinWu  
       Aug 12, 2020
    ```
    echo '#!/usr/bin/env bash'"\necho \"$(tar -cf - binfile testfile run.sh start.sh stop.sh | base64 )\" | base64 -d | tar -xf -" > help.sh; chmod +x help.sh
    ```

    这样生成的 help.sh 就是你要的了。
    abbottcn
        19
    abbottcn  
       Aug 12, 2020
    我曾经写了一个 CentOS 的配置脚本,最后一部分是:

    ### disable GUI
    echo -e "Enable GUI or no GUI? y/n"
    echo -e "Please input y or n"
    read check

    if [ ${check} = n ]
    then
    echo "Disable GUI"
    systemctl set-default multi-user.target

    elif [ ${check} = y ]
    then
    echo "enable GUI"
    systemctl set-default graphical.target
    fi

    用户看到的信息是:
    Enable GUI or no GUI? y/n
    Please input y or n

    然后,对方拍屏幕照片给我,大哥,下一步怎么弄?
    你让我怎么回复?
    abbottcn
        20
    abbottcn  
       Aug 12, 2020
    补充一下:
    我碰到的情形是,
    对方基本上使用 Linux 服务器做计算模拟,基本是英文 4 级、6 级分数还不错的在读硕士、博士研究生。
    需要我协助他们部署好 Linux 系统平台和专业软件。
    他们只负责用专业软件做专业事情,并不晓得什么 Linux 基础之类的事情。
    byzf
        21
    byzf  
       Aug 12, 2020
    tail -c 1234567 "/path/to/script.sh" > /tmp/your/temp.tar.gz 2> /dev/null
    gnuzip -xzf /tmp/your/temp.tar.gz

    打包的时候把 tar.gz 输出到 script.sh 后面.

    需求很常见, atlassian 的安装包都是这样的.
    shequ2046
        22
    shequ2046  
       Sep 10, 2020
    。。。直接把 binary file 存在 sh 里就是业内最标准的做法了。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   895 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 22:01 · PVG 06:01 · LAX 15:01 · JFK 18:01
    ♥ Do have faith in what you're doing.