如何在不使用外部脚本的情况下将exec java -jar $ 0“$ @”写入独立的可执行文件中

时间:2012-02-28 14:13:37

标签: bash clojure

这个shell脚本创建了一个独立的Clojure可执行文件,它可以工作。但是,它依赖于第二个脚本文件jar_exec。

我希望第一个脚本不依赖于第二个脚本,但我很难模拟cp命令。

我该怎么写

exec java -jar $0 "$@" 

进入独立的可执行文件而不依赖于包含此信息的第二个文件?

这是现在正常运作的主要脚本。

#!/bin/bash
# clj_exec
# Charles M. Norton 02/28/2012
# Creates a Clojure stand-alone executable.
#
# Change History:
#
# $Log$
#

if [ 2 -ne $# ]; then
    echo "Usage: clj_exec ex-path jar-path"
    exit -1
fi

cp ~/bin/jar_exec ${1}
cat ${2} >> ${1}

这是jar_exec,我想直接从第一个脚本编写,而不是依赖第二个脚本的第一个脚本。

#!/bin/bash
# jar_exec
# Charles M. Norton 1/7/2012
#
# Change History:
# $Log: jar_exec,v $
# Revision 1.1  2012/01/07 22:17:49  cvsuser
# jar creator for lein and other stuff.
#
#

exec java -jar $0 "$@"

1 个答案:

答案 0 :(得分:2)

你可以像这样使用“here documents”:

#!/bin/bash
cat > ${1} << 'EOF'
#!/bin/bash
# this is the content of jar_exec
exec java -jar $0 "$@"
EOF

chmod +x ${1}
cat ${2} >> ${1}

这意味着:<< 'EOF'EOF之间的内容是cat命令的输入。此输入将写入${1}。此文件可执行。并且罐子附加到那个(如在prev。解决方案中)。

注意:为简洁起见,我省略了参数检查。

修改

然而:当Linux和任何其他现代Unixoid可以立即执行jar文件时,为什么要做这些奇怪的事情呢?只需使jar可执行并像任何其他命令一样运行它。