guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How can i make executable guile file to process command line argumen


From: Zelphir Kaltstahl
Subject: Re: How can i make executable guile file to process command line arguments?
Date: Thu, 18 Aug 2022 17:58:39 +0000

Hello Jacob,

On 8/18/22 16:01, Jacob Hrbek wrote:
I have this file which i use to interact with a version controlled repository similar to a Makefile.

How can i make it work with e.g. `./file.scm echo wheee` -> Will execute the `(define (echo msg) ...)` and output `wheee` in the terminal?

FWIW preferably i want it to work like `./file.scm echo whee build` so that it would output `wheee` and then ran the `(define (build) ...)` task too..

#!/usr/bin/env sh
exec guile -s "$0" "$@"
!#
;;; This file is used to interact with the project

;;; ==== [START] TO BE INCLUDED IN A LIBRARY [START] ==== ;;;

;; Get path to the current filename
(define-public %repo-root (dirname (current-filename)))

;;; ==== [STOP] TO BE INCLUDED IN A LIBRARY [STOP] ==== ;;;

;; FIXME-QA(Krey): We need to define an alternative to `(define (task)...)` to be more workable and faster to write

;;; Tasks
;; DESIGN(Krey): Build the system configuration
(define (build)
  (system* "guix"
       "system"
       "build"
       (string-append %repo-root "/config.scm")))

;; DESIGN(Krey): Deploy the system configuration on the current system
(define (deploy)
  (system* "guix"
       "system"
       "reconfigure"
       (string-append %repo-root "/config.scm")))

;; DESIGN(Krey): Build the bare minimal image for rockpro64
(define (tools-minimal-rockpro64)
  (system* "guix"
       "system"
       "--system=aarch64-linux"
       "image"
       (string-append %file-root "/config.scm")))

;; Processing of cli arguments
(define (echo msg) (system* "echo" msg))

;; DESIGN(Krey): Expecting to process the command-line args here
;; HOTFIX(Krey): Didn't figure out how to do it yet, so currently hard-coding
; deploy

;(quote (cdr (command-line)))
;;(match (command-line) ((_ "build") (build)))

If you are looking for having command line arguments like --some-flag, --my-val=123 and so on, you might want to take a look at the examples in my repo: https://notabug.org/ZelphirKaltstahl/guile-examples/src/master/command-line-arguments. Maybe your use-case can be implemented using such command line arguments, instead of having "raw arguments".

Regards,
Zelphir

--
repositories: https://notabug.org/ZelphirKaltstahl




reply via email to

[Prev in Thread] Current Thread [Next in Thread]