繁体   English   中英

apt-get在bash脚本中没有按预期工作

[英]apt-get doesn't work as expected within bash script

我在bash中有一个小脚本,可以自动安装一些软件包。 它使用apt-get安装一些软件包,其余来自源代码。 我将所有需要的源代码都压缩到一个tar文件中。 示例脚本如下所示:

#!/bin/bash

apt-get install wget gcc g++ ruby php5 php5-dev xz-utils bzip2 -y

cd /usr/local/bin/
wget my-sources.tar.gz
tar zxvf my-sources.tar.gz
cd my-sources

tar zxvf package1.tar.gz
cd package1
./configure && make && make install

cd /usr/local/src/my-sources
tar zxvf package2.tar.gz
cd package2
./configure && make && make install

cd /usr/local/src/my-sources
tar zxvf package3.tar.gz
cd package3
./configure && make && make install

echo -e "\nFinished\n"

然后在python 2.7中使用zlib对此脚本进行编码:

import tempfile
import subprocess
import zlib

with open("/usr/local/src/sample.sh") as inputfile:
    teststr = zlib.compress(inputfile.read()).encode('base64')
    print teststr

然后将其传递给python脚本,该脚本执行如下:

thisstr = "Gu11nX1eVdeGlaMoouIyJtOV/cPBWrp1b7OeY7P7GXtzb
x7HETWRhTHC6NzM3k0nH6dw8uFs+qRtkJWiPrBGs1mlXWJjt7ZSUHe0
ZougLFsrAmxs3b+l+q9UKFrL1aAt0glTEo8bUuSO7Gjfe3JaYpedEgt
qkbZtz825OWUlyiz+pMPmkOdlhYu2ia+at+ZJIGZRkFzsBIqJKNhAQ4
LlBdMzdGu593UzCBtsspZiVntsFlzbyefpjCBk+PDKbyefOZMPy9Xd/
wL3ieojA=="
str=zlib.decompress(thisstr.decode('base64'))

with tempfile.NamedTemporaryFile() as scriptfile:
    scriptfile.write(str)
    scriptfile.flush()
    subprocess.call(['/bin/bash', scriptfile.name])

这里发生的是,在执行apt-get ,在中间执行wget 由于wget尚未安装,wget命令失败,则执行移动到编译和构建步骤(其抛出的文件不可用错误)。 一直以来, apt-get仍在执行中。

我尝试了两个步骤来避免这种情况:

  • apt-get命令结束时添加了sleep 5 这没有用。
  • apt-get放在另一个函数中并调用函数
    wget命令之前。

这也没有帮助。

当然,当我第二次运行它时,会安装软件包(因为所有使用apt-get安装的软件包都已存在)。

这是经过测试的,适用于Debian 6 / Debian 7

我该如何更正此错误?

我已经用我自己的脚本尝试了这个工作流程,一切都适合我,虽然解码/解压缩你提供的字符串失败了binascii.Error: Incorrect padding

我能提出的唯一建议是:

  1. 将字符串前面的put和r设置为原始格式 - base64格式编码可以创建转义序列(尽管这不是您提供的字符串的问题)。
  2. 打印str解码的字符串变量 - 这是否与原始脚本匹配? 如果apt-get行有一个& ,那么这将产生你描述的行为。
  3. 查看使用原始脚本尝试呼叫时发生的情况,即

    subprocess.call(['/bin/bash', '/usr/local/src/sample.sh'])

    如果这会产生相同的行为,请检查它是否仍然直接从bash运行脚本。 这可能是一些奇怪的事情,python引入或bash / apt配置的一些问题导致事情进入后台(虽然我不知道任何选项可以做到这一点,我知道两者相当好)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM