(defun my-command-line () (or #+SBCL *posix-argv* #+LISPWORKS system:*line-arguments-list* #+CMU extensions:*command-line-words* nil)) (defun my-getenv (name &optional default) #+CMU (let ((x (assoc name ext:*environment-list* :test #'string=))) (if x (cdr x) default)) #-CMU (or #+Allegro (sys:getenv name) #+CLISP (ext:getenv name) #+ECL (si:getenv name) #+SBCL (sb-unix::posix-getenv name) #+LISPWORKS (lispworks:environment-variable name) default)) (defun sh (com &rest args) (let ((path (which com))) (with-output-to-string (s) (with-open-stream (files (sb-ext:process-output (sb-ext:run-program path args :output s))))))) (defun tmp-file () (line1 (sh "mktemp"))) (defun tmp-dir () (let* ((dir (format nil "~a" (random 1000000000))) (path (make-pathname :directory `(:absolute "tmp" ,dir)))) (ensure-directories-exist path) (format nil "/tmp/~a" dir))) (defun which (exe) (if (eql #\/ (char exe 0)) exe (let* ((com (format nil "which ~a" exe))) (line1 (sh "/bin/bash" "-c" com)))))