From b849afd06be6da866a31a0be74d90851c0258134 Mon Sep 17 00:00:00 2001 From: Colin Okay Date: Fri, 11 Feb 2022 11:15:29 -0600 Subject: added some utilities --- src/main.lisp | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main.lisp b/src/main.lisp index 649c140..8d7db60 100644 --- a/src/main.lisp +++ b/src/main.lisp @@ -1,5 +1,32 @@ +;;;; main.lisp -- oneliners.cli entrypoint + (defpackage oneliners.cli (:use :cl)) (in-package :oneliners.cli) -;; blah blah blah. +;;; UTILITIES + +(defun parent-process-name () + "Prints the name of the parent process of the current process." + (let ((ppidfile (format nil "/proc/~a/status" (osicat-posix:getppid)))) + (first (last + (ppcre:split "\\s" + (with-open-file (input ppidfile) + (read-line input))))))) + +(defun run-with-shell + (command + &key + (shell-name (parent-process-name)) + (await-output-p t) + (output-stream *standard-output*)) + (let ((shell + (uiop:launch-program shell-name :input :stream :output :stream))) + (write-line command (uiop:process-info-input shell)) + (finish-output (uiop:process-info-input shell)) + (when await-output-p + (loop until (listen (uiop:process-info-output shell))) + (loop while (listen (uiop:process-info-output shell)) + do (princ (read-line (uiop:process-info-output shell)) output-stream) + (terpri output-stream))))) + -- cgit v1.2.3