Зависит от базы данных, поскольку каждая база данных имеет различный способ добавить порядковые номера. Я изменил бы таблицу, чтобы добавить, что столбец тогда пишет сценарий дб в отличном/Python/и т.д., чтобы читать в данных и обновить идентификатор с последовательностью. Как только данные были установлены, я добавлю последовательность к таблице, которая запускается после главного числа. Как только данные были установлены, устанавливал первичные ключи правильно.
ASDF предоставляет RUN-SHELL-COMMAND
, который работает со многими реализациями Common Lisp , включая ABCL, Allegro CL, CLISP, Clozure CL, ECL, GCL, LispWorks, SBCL, CMU, XCL и SCL.
Он принимает управляющую строку и список аргументов, например FORMAT
, и синхронно выполняет результат, используя Bourne-совместимую оболочку. Захватите выход, связав дополнительный поток.
ITA выпустила нижнюю оболочку в рамках своего зонтичного проекта QITAB.
Некоторые ссылки могут представлять интерес:
Репозиторий git в настоящее время размещен на common-lisp.net:
git clone git://common-lisp.net/projects/qitab/inferior-shell.git
Вы можете использовать Trivial-shell ( url )
(trivial-shell:shell-command "echo foo")
команда оболочки возвращает результат, поэтому вы можете присвоить его переменной.
В файле asdf.lisp вы можете прочитать:
;;;; Вероятно, нам следует перенести эту функциональность в собственную систему и отказаться от нее
;;;; использование его из пакета asdf. Тем не менее, это будет нарушено не указано
;;;; существующее программное обеспечение, поэтому пока не существует четкой альтернативы, мы не можем осудить
;;;; это, и даже после того, как это устарело, мы будем поддерживать его в течение нескольких
;;;; лет, так что у всех есть время, чтобы уйти от этого. - тариф 2009-12-01
В настоящее время я бы использовал uiop:run-program
, где uiop
означает «универсальный ввод-вывод» и представляет собой слой совместимости, предоставляемый asdf3, ранее известный как asdf/driver
. Как уже было сказано, asdf:run-shell-command
устарел, и uiop наследует многие особенности других библиотек, таких как trivial-shell
.
Некоторые реализации CL имеют встроенные функции для этой цели. Например, SBCL имеет sb-ext:run-program
, а CCL имеет run-program
.
В sbcl:
(sb-ext:run-program "/bin/sh" (list "-c" "whoami") :input nil :output *standard-output*)
Это прекрасно работает для меня:)
Эта (appupdate.cl) программа является примером создания и выполнения сценария оболочки с использованием реализации Steel Bank Common Lisp (sbcl), которая предполагает, что у вас установлен sbcl и он находится на вашем пути.
Я написал это в Ubuntu 14.04 как простой способ автоматизировать обновление, обновление и обновление ядра приложения / системного программного обеспечения.
#!/usr/local/bin/sbcl --script
(with-open-file (str "/home/geo/update.sh"
:direction :output
:if-exists :supersede
:if-does-not-exist :create)
(format str "#! /bin/bash~%~%apt-get update~%~%apt-get upgrade -y~%~%apt-get dist-upgrade -y~%~%exit~%))
(sb-ext:run-program "/bin/chmod" '("+x" "/home/geo/update.sh")
:output *standard-output*)
(sb-ext:run-program "/bin/bash" '("/home/geo/update.sh")
:output *standard-output*)
(sb-ext:run-program "/bin/rm" '("-rf" "/home/geo/update.sh")
:output *standard-output*)
Поэтому, конечно, он создает скрипт оболочки с именем update.sh, который направляется в / bin / bash через shebang (#!). После этого встроенная sb-ext: run-program направляет оболочку для выполнения / bin / chmod, передавая флаг "+ x" в качестве аргумента и / path / to / the-file. Эта функция изменяет режим доступа файла к исполняемому файлу (изменяет права доступа).
Затем оболочка открыта и выполняет / bin / bash, а двоичному файлу bash передается аргумент местоположения файла исполняемых сценариев оболочки.
Наконец, файл удаляется из рабочего каталога (обратите внимание, что в этом случае appupdate.cl находится в моем домашнем каталоге, поэтому это рабочий каталог).
Файл appupdate.cl может быть выполнен из командной строки после его изменения на исполняемый и получения временных привилегий root:
:~$ chmod +x appupdate.cl
:~$ sudo bash
:~# ./appupdate.cl
:~# exit
Достаточно легко добавить команду sudo в скрипт (например, sudo apt-get update) и использование последовательности sudo bash не требуется.
ПРИМЕЧАНИЕ. В LispWorks ide 14.04 (sys: run-shell-command "") по-прежнему применимо, даже если оно в некотором роде стало унаследованной функцией.