unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Zelphir Kaltstahl <zelphirkaltstahl@posteo.de>
To: Jacob Hrbek <kreyren@rixotstudio.cz>
Cc: guile-user@gnu.org
Subject: Re: How can i make executable guile file to process command line arguments?
Date: Thu, 18 Aug 2022 17:58:39 +0000	[thread overview]
Message-ID: <8be2854b-b8f4-b016-b820-e937c8f17c4f@posteo.de> (raw)
In-Reply-To: <6e5568cb-2924-010b-84b3-1fbf3482300b@rixotstudio.cz>

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




      parent reply	other threads:[~2022-08-18 17:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-18 14:01 How can i make executable guile file to process command line arguments? Jacob Hrbek
2022-08-18 14:26 ` Olivier Dion via General Guile related discussions
2022-08-18 17:58 ` Zelphir Kaltstahl [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8be2854b-b8f4-b016-b820-e937c8f17c4f@posteo.de \
    --to=zelphirkaltstahl@posteo.de \
    --cc=guile-user@gnu.org \
    --cc=kreyren@rixotstudio.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).