![](/img/trans.png)
[英]sudo apt-get update doesn't work after uninstalling python2.7
[英]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
。
我能提出的唯一建議是:
r
設置為原始格式 - base64格式編碼可以創建轉義序列(盡管這不是您提供的字符串的問題)。 str
解碼的字符串變量 - 這是否與原始腳本匹配? 如果apt-get行有一個&
,那么這將產生你描述的行為。 查看使用原始腳本嘗試呼叫時發生的情況,即
subprocess.call(['/bin/bash', '/usr/local/src/sample.sh'])
如果這會產生相同的行為,請檢查它是否仍然直接從bash運行腳本。 這可能是一些奇怪的事情,python引入或bash / apt配置的一些問題導致事情進入后台(雖然我不知道任何選項可以做到這一點,我知道兩者相當好)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.