與編寫a file that autoextracts itself一樣,我正在尋找一種在腳本(或任何它需要的)內自動運行程序的方法。我想要腳本的程序部分,因爲我只想要一個文件。這實際上是一個挑戰:我有一個xz壓縮程序,我希望能夠在沒有用戶干預xz程序的情況下運行它(只是一個./the程序)。自動運行自己的文件
任何想法?
與編寫a file that autoextracts itself一樣,我正在尋找一種在腳本(或任何它需要的)內自動運行程序的方法。我想要腳本的程序部分,因爲我只想要一個文件。這實際上是一個挑戰:我有一個xz壓縮程序,我希望能夠在沒有用戶干預xz程序的情況下運行它(只是一個./the程序)。自動運行自己的文件
任何想法?
自動運行後做什麼?登錄?請致電~/.bashrc
。在啓動?編寫一個合適的/etc/init.d/yourprog
並將其鏈接到所需的運行級別。 Selfextract?使它成爲一個shell歸檔文件(shar文件)。請參閱shar
實用程序,http://linux.die.net/man/1/shar
看到上面的評論,我解釋了所有。我要修改帖子,但並不像我預期的那麼清晰。 – phaazon
對不起,但我只是在想...這樣的東西不行? (我假設它是一個腳本...)
#!/bin/bash
cat << 'EOF' > yourfile
yourscript
EOF
chmod +x yourfile
./yourfile
不過,這是非常難以準確瞭解你正在嘗試做的......在我看來,該「自動運行」是非常相似一個「從腳本中調用程序」..
Java安裝程序用於遵循此路徑,您將得到一個帶有編碼可執行文件的大型shell腳本,並將其嵌入解碼並運行的腳本中。 –
我已經爲此寫了一個腳本。這應有助於:
#!/bin/bash
set -e
payload=$(cat $0 | grep --binary-files=text -n ^PAYLOAD: | cut -d: -f1)
filaname=`head $0 -n $payload | tail -n 1 | cut -d: -f2-`
tail -n +$(($payload + 1)) $0 > /tmp/$filaname
set +e
#Do whatever with the payload
exit 0
#Command to add payload:
#read x; ls $x && (cp 'binary_script.sh' ${x}_binary_script.sh; echo $x >> ${x}_binary_script.sh; cat $x >> ${x}_binary_script.sh )
#Note: Strictly NO any character after "PAYLOAD:", not even newline...
PAYLOAD:
使用範例:
假設myNestedScript.sh
包含以下數據:
#!/bin/bash
echo hello world
然後運行
x=myNestedScript.sh; ls $x && (cp 'binary_script.sh' ${x}_binary_script.sh; echo $x >> ${x}_binary_script.sh; cat $x >> ${x}_binary_script.sh )
它會生成以下文件,你可以直接執行。在執行以下文件時,它將提取myNestedScript.sh
至/tmp
&運行該腳本。
#!/bin/bash
set -e
payload=$(cat $0 | grep --binary-files=text -n ^PAYLOAD: | cut -d: -f1)
filaname=`head $0 -n $payload | tail -n 1 | cut -d: -f2-`
tail -n +$(($payload + 1)) $0 > /tmp/$filaname
set +e
chmod 755 /tmp/$filaname
/tmp/$filaname
exit 0
PAYLOAD:myNestedScript.sh
#!/bin/bash
echo hello world
你是什麼意思autorun?你可以直接在腳本中調用程序,那有什麼問題? –
我想要腳本的程序部分,因爲我只想要一個文件。這實際上是一個挑戰:我有一個xz壓縮程序,我希望能夠在沒有用戶干預xz程序的情況下運行它(只是'./ theprogram')。 – phaazon
如果你的意思是你可以創建一個檔案,提取自己並從內容中執行某些內容,當然可以。執行提取操作的腳本會在嵌入的可執行文件被提取後啓動:'exec yourexecutable'(exec將用可執行文件替換當前進程 - 解壓縮腳本)。 –
William