Можно записать единственный сценарий обертки, который выполняет банку, названную в честь способа, которым это называют, и сделайте одну символьную ссылку для каждой банки. Вот сценарий обертки банки (предупреждение, введенное непосредственно в браузер):
#!/bin/sh
name=$(basename "$0")
jar=
for dir in /opt/myjava/*; do
if [ -e "$dir/$name.jar" ]; then jar=$dir/$name.jar; break; fi
done
if [ -z "$jar" ]; then
echo 1>&2 "$name.jar not found"
exit 126
fi
exec /your/favorite/java -jar "$jar" "$@"
Затем создайте как много символьных ссылок на сценарий обертки как Вам угодно и вставьте их Ваш $PATH
если Вы хотите:
ln -s wrapper-script myprog1
ln -s wrapper-script myprog2
Если Вы запускаете Linux, и Вы - системный администратор, то можно выбрать интерпретатор Java для создания банок непосредственно исполняемым файлом благодаря binfmt_misc механизму.
Например, в моей системе:
$ cat /proc/sys/fs/binfmt_misc/jar
enabled
interpreter /usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/jexec
flags:
offset 0
magic 504b0304
Эта система документируется в Documentation/binfmt_misc.txt
в документации ядра Linux. Для создания записи как та выше выполните команду
jexec=/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/jexec
echo >/proc/sys/fs/binfmt_misc/register ":jar:M:0:504b0304::$jexec:"
Ваше распределение может иметь в распоряжении механизм для binfmt регистрации во время начальной загрузки. На Debian и производных, это update-binfmts
, и пакеты JVM уже регистрируются jexec
.
Если необходимо передать опции, зарегистрировать сценарий обертки, который добавляет опции вместо jexec
непосредственно.
В Windows система часы RTC традиционно сохранены в местное время. В Unix и Linux, это традиционно сохранено в UTC, и /etc/localtime
используется для указания на текущий часовой пояс так, чтобы отображенное время было корректно.
Эти два мировоззрения сталкиваются в конфигурациях двойной загрузки, потому что существует только один RTC. Обычно, Вы говорите Linux предполагать, что RTC является местным временем (потому что Windows не может быть сказан). Это варьируется от одного Linux до другого, но так как Монетный двор похож на Ubuntu, которую можно, вероятно, установить UTC=no
в /etc/default/rcS
. Затем можно установить часы на местное время в Windows, и Linux оставит его в покое после этого.
Примечание редактора:
Тот файл не присутствует начиная с Linux Mint 19 (или более точно начиная с основы Ubuntu 18.04):
/etc/default/rcS
наиболее общий способ сделать это:
hwclock --systohc --localtime
, который сохраняется при перезагрузках и работает в большинстве систем.
ПРЕДУПРЕЖДЕНИЕ
Этот метод содержит ошибки в версиях Windows до 7, но он решает проблему на стороне Windows уравнения, а не на конец Linux: вам не нужно настраивать Linux для использования локального времени .
Взято из самой знаменитой и уважаемой Arch Linux Wiki :
Одной из причин, по которой пользователи часто устанавливают RTC в локальное время, является двойная загрузка с Windows (которая использует локальное время).
Однако Windows [может обрабатывать RTC как UTC] с помощью простого исправления реестра. Рекомендуется настроить Windows для использования UTC, а не для Linux для использования локального времени.
Используя
regedit
, добавьте значениеDWORD
с шестнадцатеричным значением1
в реестр:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ TimeZoneInformation \ RealTimeIsUniversal
Вы можете сделать это из командной строки администратора:
reg add "HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ TimeZoneInformation" / v RealTimeIsUniversal / d 1 / t REG_DWORD / f {{1} }
В качестве альтернативы создайте файл * .reg (на рабочем столе) со следующим содержимым и дважды щелкните его, чтобы импортировать в реестр:
Редактор реестра Windows версии 5.00 [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ TimeZoneInformation] "RealTimeIsUniversal" = dword: 00000001
Если это не действует , и используется 64-разрядный вариант Windows, использование значения
QWORD
вместо значенияDWORD
может решить проблему.
Если Windows попросит обновить часы из-за перехода на летнее время, позвольте. Он оставит часы в UTC, как ожидалось, исправляя только отображаемое время.
Аппаратные и системные часы, возможно, потребуется обновить после установки этого значения. Если у вас возникли проблемы со смещением времени, попробуйте переустановить tzdata, а затем снова установите часовой пояс :# timedatectl set-timezone America / Los_Angeles
Изменить (как корневую переменную)/etc/timeadj
с UTC
на LOCAL
.
Это решило проблему без необходимости возиться с regedit на стороне Windows.
Запустите одну из этих двух команд, соответствующих вашему местному времени
timedatectl set-local-rtc 1 --adjust-system-clock
'или'
timedatectl set-local-rtc 0 --adjust-system-clock