我在bash中有一個小腳本,它可以自動安裝一些軟件包。它使用apt-get安裝一些軟件包,其餘來自源代碼。我有我需要的所有來源tarred到一個單一的tar文件。示例腳本看起來如下:apt-get在bash腳本中無法正常工作
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])
#!/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
編碼
這裏發生的是,當apt-get
正在執行時,中間會嘗試wget
。由於wget
尚未安裝,因此wget命令失敗,然後執行移至編譯和構建步驟(由於文件不可用而拋出錯誤)。一直以來,apt-get
仍在執行中。
我試圖2個步驟,以避免這樣的:
- 在
apt-get
命令結束時加入sleep 5
。這沒有 的幫助。 - 將
apt-get
放在另一個函數中,並在wget
命令之前調用的函數只是
。
這也沒有幫助。
當然,當我第二次運行它時,軟件包會被安裝(因爲所有要使用apt-get
安裝的軟件包已經存在)。
這是測試,是Debian 6/Debian的7
我怎樣才能糾正這一錯誤?
你有沒有試過在'apt-get'之後放置'wait'? – lifesaspanner
@lifesaspanner - 不,我不知道這樣的選擇。你可以給'wait'的語法,以便我可以試試嗎? – rahuL
這只是「等待」。只需在'apt-get'後面輸入就可以了。看看「男人等待」參考。 – lifesaspanner