就像可以编写一个自动提取自身的文件一样,我正在寻找一种在脚本(或任何它需要的东西)中自动运行程序的方法。我想要脚本的程序部分,因为我只想要一个文件。这实际上是一个挑战:我有一个 xz 压缩程序,我希望能够在没有用户干预 xz 程序的情况下运行它(只是一个 ./theprogram)。
任何想法?
就像可以编写一个自动提取自身的文件一样,我正在寻找一种在脚本(或任何它需要的东西)中自动运行程序的方法。我想要脚本的程序部分,因为我只想要一个文件。这实际上是一个挑战:我有一个 xz 压缩程序,我希望能够在没有用户干预 xz 程序的情况下运行它(只是一个 ./theprogram)。
任何想法?
做了什么后自动运行?登录?把它叫进来~/.bashrc
。开机时?编写适当的/etc/init.d/yourprog
并将其链接到所需的运行级别。自解压?将其设为 shell 存档(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
对不起,但我只是在想......这样的东西行不通?(我假设它是一个脚本......)
#!/bin/bash
cat << 'EOF' > yourfile
yourscript
EOF
chmod +x yourfile
./yourfile
尽管如此,仍然很难准确理解您要做什么……在我看来,“自动运行”与“从脚本中调用程序”非常相似。