Как записать exec java -jar $ 0 "$ @" в автономный исполняемый файл без использования внешнего скрипта - PullRequest
1 голос
/ 28 февраля 2012

Этот сценарий оболочки создает отдельный исполняемый файл 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 Ответ

2 голосов
/ 28 февраля 2012

Вы можете использовать «здесь документы» следующим образом:

#!/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}.Этот файл становится исполняемым.И к нему добавляется банка (как в предыдущем решении).

Примечание. Для краткости я не включил проверку аргументов.

Редактировать :

Однако : Зачем вам делать такие странные вещи, когда Linux и любой другой современный Unixoid могут выполнять jar-файлы сразу?Просто сделайте исполняемый файл jar и выполните его, как любую другую команду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...