这个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 "$@"
答案 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可执行并像任何其他命令一样运行它。