Я имею VI в Windows, версия, которую я использую, упоминается ниже, если я всегда нахожусь в консоли я значение по умолчанию к VI, затем независимо от того, на чем ОС я работаю, я знаю, что могу отредактировать файл. С другой стороны, если я нахожусь в режиме UI, я использую Блокнот ++ пойди разберись.
короткая тонна VI - Версия 0.23, Разработанная: Tony Andrews На основе программы: Tim Thompson
Другой простой способ - заставить Lisp запустить HTTP-сервер и связываться с Lisp извне через HTTP-запросы.
На ум приходит пара способов:
Выполнить программу lisp с процессом . Общайтесь с программой на Лиспе через стандартный вход, и пусть программа на Лиспе выводит свой результат через стандартный вывод.
Сделайте то же самое, что и выше, но вместо этого общайтесь через именованные каналы . Пусть ваш код Ruby записывает данные в именованный канал, затем пусть программа Lisp читает из этого канала и записывает данные из через другой именованный канал, который вы затем читаете с помощью своего приложения Ruby. Программа на Лиспе может либо работать в фоновом режиме как демон, который проверяет данные на своем входящем конвейере, либо вы можете запускать ее по мере необходимости с помощью утилит командной строки Ruby (как указано выше).
Найдите мост Ruby-Lisp . У меня нет опыта работы с таким мостом (и я не знаю, существует ли он вообще), и я думаю, что два вышеуказанных механизма проще, но ваш опыт может отличаться.
CL-JSON поддерживает JSON-RPC . Очень легко настроить веб-сервер, такой как Hunchentoot , чтобы иметь веб-службу на основе Lisp, которую может использовать все, что говорит JSON-RPC (например, this ).
Я бы сделал что-то вроде этого:
#!/bin/bash
trap : SIGTERM SIGINT
echo $$
find / >/dev/null 2>&1 &
FIND_PID=$!
wait $FIND_PID
if [[ $? -gt 128 ]]
then
kill $FIND_PID
fi
Думаю, уместно несколько пояснений. Выйдя из ворот, нам нужно изменить некоторые параметры обработки сигналов по умолчанию. :
- это не выполняемая команда, поскольку передача пустой строки заставляет оболочку игнорировать сигнал вместо того, чтобы делать что-то с ним (противоположное тому, что мы хотим сделать).
Затем команда find
выполняется в фоновом режиме (с точки зрения сценария), и мы вызываем встроенную функцию wait
для ее завершения. Поскольку мы дали реальную команду trap
выше, при обработке сигнала wait
завершится со статусом больше 128. Если процесс wait
ed для завершает, wait
вернет статус выхода этого процесса.
Наконец, если wait
возвращает этот статус ошибки, мы хотим убить
дочерний процесс. К счастью, мы сохранили его PID. Преимущество этого подхода в том, что вы можете записать сообщение об ошибке или иным образом определить, что сигнал вызвал завершение работы сценария.
Как уже упоминалось другими, использование kill - - $$
в качестве аргумента для ловушки
- это еще один вариант, если вы не заботитесь о том, чтобы оставлять какую-либо информацию после выхода.
Чтобы ловушка
работала так, как вы хотите, вам нужно объединить ее с wait
- на странице руководства bash
указано: «Если bash
ожидает завершения команды и получает сигнал, для которого установлена ловушка
, Реализовать Lisp с классами Ruby - это просто. Это было сделано в главе 8 Практические проекты Ruby .