【问题标题】:Shell script: how to pass arguments into racket that is interpreted in the racket session?Shell脚本:如何将参数传递给在球拍会话中解释的球拍?
【发布时间】:2021-04-09 19:10:23
【问题描述】:

我正在尝试构建一个 shell 脚本来 1. 使用 racket 打开球拍语言交互会话和 2. 通过 require (planet dyoo/simply-scheme:2:2)) 在球拍会话中添加适当的语言和版本。

我不想输入racket,等待它加载,然后输入require (planet dyoo/simply-scheme:2:2)),我想构建一个shell脚本来自动执行此操作。

我该怎么做?

【问题讨论】:

    标签: macos shell sh racket zsh


    【解决方案1】:

    实现此目的的命令行是racket -i -p dyoo/simply-scheme:2:2(或者使用-e 标志)。然后在 sh/bash 中构建是微不足道的:

    #!/bin/sh
    
    racket -i -p dyoo/simply-scheme:2:2
    

    你甚至可以像这样在 Racket 中编写一个脚本,它接受一个参数来要求任何包:

    ;; repl.rkt
    
    #! /usr/bin/env racket
    
    (require racket/cmdline)
    (require racket/system)
    
    (define package (make-parameter ""))
    
    (define parser
      (command-line
       #:usage-help
       "Start a racket REPL and require an initial package."
    
       #:once-each
       [("-p" "--package") PACKAGE
                        "Add an initial package to require."
                        (package PACKAGE)]
    
       #:args () (void)))
    
    
    (define (run (package-name))
      (system (~a (printf "racket -i -p ~a" package-name))))
    
    (run package)
    

    然后运行repl.rkt -p dyoo/simply-scheme:2:2

    替代命令是racket -i -e '(require (planet "dyoo/simply-scheme:2:2"))'

    更新:shebang 已根据 cmets 进行了更正。

    【讨论】:

    • shebang #!/usr/bin/bash 是不寻常的,并且对于某些平台是错误的。可能尝试#!/bin/bash#!/usr/bin/env bash,如果你得到“/usr/bin/bash: bad interpreter: No such file or directory”或类似的。
    • @tripleee: 或者只使用#!/bin/sh -,它将适用于任何远程兼容的东西。
    • 是的,只要你只使用sh 语法,当然是这个。许多初学者对shbash 是两个具有不同功能集的不同shell 感到惊讶(尽管Bash 是sh 的严格超集)。
    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 2011-10-24
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多