Добавление вызова команды в приложение командной строки Unix
Я работаю над приложением командной строки для Solaris, написанным на Java6. Я хотел бы иметь возможность прокручивать историю предыдущих команд, используя стрелки вверх и вниз, как это позволяют многие инструменты Unix (оболочки, приглашение в режиме команд VIM и т. Д.).
Есть ли какой-нибудь стандартный способ достижения этого, или я должен свернуть свой собственный?
5 ответов
Я думаю, что вы ищете что-то вроде JLine, но я никогда не использовал его, поэтому не могу подтвердить его качество.
Она, очевидно, может иметь дело с автозаполнением и историей командной строки, и последний выпуск был недавно (февраль этого года), так что он ни в коем случае не мертв.
Ledit отлично подходит для Linux для такого рода вещей. Это, вероятно, легко скомпилировано на солярисе.
Пояснение: ledit переносит вызов в другое приложение командной строки и даже может передать файл для постоянного хранения вашей истории.
Вот домашняя страница: http://cristal.inria.fr/~ddr/ledit/
Существует проект SourceForge, http://java-readline.sourceforge.net/, который предоставляет привязки на основе JNI для GNU readline. Я играл с ним (не используется в реальном проекте), и он, безусловно, охватывает все функциональные возможности.
Предупреждение: GNU readline подпадает под условия лицензии GPL:
Readline - это бесплатное программное обеспечение, распространяемое на условиях Стандартной общественной лицензии GNU, версия 2. Это означает, что если вы хотите использовать Readline в программе, которую вы выпускаете или распространяете среди всех, программа должна быть бесплатной и иметь GPL-лицензию. совместимая лицензия. Если вы хотите получить совет по созданию лицензии, совместимой с GPL, свяжитесь с licensing@gnu.org.
Другими словами, использование Readline распространяет GPL-ность из библиотеки на всю программу. (Контраст с LGPL, который позволяет связывать во время выполнения с библиотекой и требует открытого доступа только для улучшения самой библиотеки.)
Для тех из нас, кто находится в коммерческом мире, даже если мы не разрабатываем коммерческие приложения, это - шоу-стопор.
В любом случае, на странице википедии перечислены несколько альтернатив, включая JLine, что звучит многообещающе.
Просто в стороне: я работаю в компании, которая разрабатывает медицинские продукты. Мы зарабатываем ноль (0) долларов на программном обеспечении для ПК. Почти все наше программное обеспечение работает на встроенных системах, которые мы проектируем (и мы не зарабатываем деньги на продажах / обновлениях этого программного обеспечения, только на самих продуктах); иногда у нас есть программные средства диагностики, которые могут работать на компьютерах конечных пользователей. (программное обеспечение для разработки / производства / тестирования, которое не выпускается для клиентов, я думаю, возможно, будет возможно использовать библиотеки GPL, но я не уверен) Медицинские продукты имеют довольно жесткий контроль; Вы должны доказать FDA, что это безопасно для пользователей, но конечный пользователь не может решить: "О, мне не нравится это программное обеспечение, я просто настрою его или воспользуюсь заменой на вторичном рынке компании XYZ" - это оставить производителей устройств открытыми для огромной ответственности.