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

问题描述:

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

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

我如何写

exec java -jar $0 "[email protected]" 

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

这是主要的脚本,它现在的工作。

#!/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 "[email protected]" 

你可以使用 “这里的文档” 是这样的:

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

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

这意味着:<< 'EOF'EOF之间的东西输入到cat命令。该输入写入${1}。这个文件被制作成可执行文件。然后将jar添加到该目录中(如前面的解决方案)。

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

编辑

然而:为什么你会做这个奇怪的东西,在Linux和其他任何现代Unixoid可执行的JAR文件,对吗?只需使jar可执行并像任何其他命令一样运行即可。

+0

谢谢。我忘记了这里的文件。 – octopusgrabbus 2012-02-28 14:24:17

+0

@octopusgrabbus:我添加了一些通知。请检查。 – 2012-02-28 14:26:01

+0

你是对的,但这是蛋糕的一个不错的功能(至少我知道)在lein。 – octopusgrabbus 2012-02-28 14:38:31