0

自分自身を自動抽出するファイルを作成できるのと同じ方法で、スクリプト (または必要なもの) 内でプログラムを自動実行する方法を探しています。必要なファイルは 1 つだけなので、スクリプトのプログラム部分が必要です。それは実際には挑戦です: xz 圧縮プログラムがあり、ユーザーが xz プログラムに介入することなく (./theprogram だけで) 実行できるようにしたいと考えています。

何か案が?

4

3 に答える 3

0

申し訳ありませんが、私はただ考えていました...このようなことはうまくいきませんか?(私はそれがスクリプトであると仮定しています...)

#!/bin/bash

cat << 'EOF' > yourfile
yourscript
EOF

chmod +x yourfile

./yourfile

それでも、何をしようとしているのかを正確に理解するのはかなり難しいです...「自動実行」は「スクリプト内からプログラムを呼び出す」ことにかなり似ているようです..

于 2013-04-03T13:40:45.337 に答える
0

何をした後に自動実行しますか?ログイン?で呼び出し~/.bashrcます。起動中?適切な/etc/init.d/yourprogを記述し、目的のランレベルにリンクします。自己解凍?シェル アーカイブ (shar ファイル) にします。sharユーティリティを参照してください。 http://linux.die.net/man/1/shar

于 2013-04-03T13:33:42.443 に答える
0

このためのスクリプトを書いていました。これは役立つはずです:

#!/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
于 2013-04-03T15:04:23.910 に答える