自分自身を自動抽出するファイルを作成できるのと同じ方法で、スクリプト (または必要なもの) 内でプログラムを自動実行する方法を探しています。必要なファイルは 1 つだけなので、スクリプトのプログラム部分が必要です。それは実際には挑戦です: xz 圧縮プログラムがあり、ユーザーが xz プログラムに介入することなく (./theprogram だけで) 実行できるようにしたいと考えています。
何か案が?
自分自身を自動抽出するファイルを作成できるのと同じ方法で、スクリプト (または必要なもの) 内でプログラムを自動実行する方法を探しています。必要なファイルは 1 つだけなので、スクリプトのプログラム部分が必要です。それは実際には挑戦です: xz 圧縮プログラムがあり、ユーザーが xz プログラムに介入することなく (./theprogram だけで) 実行できるようにしたいと考えています。
何か案が?
申し訳ありませんが、私はただ考えていました...このようなことはうまくいきませんか?(私はそれがスクリプトであると仮定しています...)
#!/bin/bash
cat << 'EOF' > yourfile
yourscript
EOF
chmod +x yourfile
./yourfile
それでも、何をしようとしているのかを正確に理解するのはかなり難しいです...「自動実行」は「スクリプト内からプログラムを呼び出す」ことにかなり似ているようです..
何をした後に自動実行しますか?ログイン?で呼び出し~/.bashrc
ます。起動中?適切な/etc/init.d/yourprog
を記述し、目的のランレベルにリンクします。自己解凍?シェル アーカイブ (shar ファイル) にします。shar
ユーティリティを参照してください。 http://linux.die.net/man/1/shar
このためのスクリプトを書いていました。これは役立つはずです:
#!/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