0

就像可以编写一个自动提取自身的文件一样,我正在寻找一种在脚本(或任何它需要的东西)中自动运行程序的方法。我想要脚本的程序部分,因为我只想要一个文件。这实际上是一个挑战:我有一个 xz 压缩程序,我希望能够在没有用户干预 xz 程序的情况下运行它(只是一个 ./theprogram)。

任何想法?

4

3 回答 3

0

做了什么后自动运行?登录?把它叫进来~/.bashrc。开机时?编写适当的/etc/init.d/yourprog并将其链接到所需的运行级别。自解压?将其设为 shell 存档(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 回答
0

对不起,但我只是在想......这样的东西行不通?(我假设它是一个脚本......)

#!/bin/bash

cat << 'EOF' > yourfile
yourscript
EOF

chmod +x yourfile

./yourfile

尽管如此,仍然很难准确理解您要做什么……在我看来,“自动运行”与“从脚本中调用程序”非常相似。

于 2013-04-03T13:40:45.337 回答