簡體   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