Эта (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 "") по-прежнему применимо, даже если оно в некотором роде стало "устаревшей" функцией.