如何在不使用外部脚本的情况下将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可执行并像任何其他命令一样运行即可。
谢谢。我忘记了这里的文件。 – octopusgrabbus 2012-02-28 14:24:17
@octopusgrabbus:我添加了一些通知。请检查。 – 2012-02-28 14:26:01
你是对的,但这是蛋糕的一个不错的功能(至少我知道)在lein。 – octopusgrabbus 2012-02-28 14:38:31