【问题标题】:How can I get kermit script to accept arguments and connect to serial device如何让 kermit 脚本接受参数并连接到串行设备
【发布时间】:2023-03-11 02:32:01
【问题描述】:

我在kermit 脚本中编写了以下内容以连接到我的串行设备:

#!/usr/bin/env kermit
set port /dev/ttyUSB8
set speed 115200
set carrier-watch off
set flow-control none
set prefixing all
set input echo on

它做得很好。现在,我想让它成为一个通用脚本,并希望从用户那里获取他想要连接的端口的输入。所以,我认为将输入作为命令行参数是最好的方法。我通过以下方式修改了上述内容:

#!/usr/bin/env kermit
port_num="/dev/ttyUSB"+$1
set port port_num
set speed 115200
set carrier-watch off
set flow-control none
set prefixing all
set input echo on

但是,我收到以下错误:

user4@user-pc-4:~/Scripts$ ./test.script 8
?Not a command or macro name: "port_num="/dev/ttyUSB$1""
File: /home/Scripts/test.script, Line: 2
port_num
?SET SPEED has no effect without prior SET LINE
"8" - invalid command-line option, type "kermit -h" for help

我尝试替换

port_num="/dev/ttyUSB"+$1

port_num="/dev/ttyUSB$1"

也是。

我的第二个脚本有一个明显的缺陷。如何让脚本接受用户输入并使用kermit 连接到串行端口?

【问题讨论】:

    标签: shell scripting parameter-passing command-line-arguments kermit


    【解决方案1】:

    kermit 脚本语言与 bash 完全不同。在命令行上传递的参数在 bash 中由美元符号扩展(如 $1)。在 kermit 中,它们使用反斜杠百分比符号进行扩展,如 \%1

    要将后续命令行参数传递给脚本引擎,您必须使用 + 参数调用 kermit

    为了告诉操作系统您的脚本必须由kermit 解释,您使用了所谓的env shebang #!/usr/bin/env,它与+ 参数不兼容。这意味着您必须在系统上找到kermit,发出命令

    $ type kermit
    kermit is /usr/bin/kermit
    

    (另一个常见的位置是/usr/local/bin/kermit)。现在,在 shebang 中放置正确的位置,添加 + 参数,就完成了:

    #!/usr/bin/kermit +
    set port /dev/ttyUSB8\%1
    set speed 115200
    set carrier-watch off
    set flow-control none
    set prefixing all
    set input echo on
    

    如果你想定义一个(用户定义变量的kermit名称)你可以,这是一种定义默认值的方法:

    assign port_num \%1
    if not defined port_num assign port_num 8
    set port /dev/ttyUSB\m(port_num)
    

    【讨论】:

    • 成功了!我也试过。不幸的是,它不适用于我的情况(就像你说的,它也不需要)。您能否分享我可以了解更多关于kermit 脚本的任何链接(最好带有示例)? This 没有多大帮助。
    • @skrowten_hermit 我编辑了宏部分,有一个错误。现在,如果您不提供默认值,它可以使用默认值。 kermit 项目的商业模式是,该软件是免费用于非商业用途的,您必须为文档付费。现在源代码是免费的,但是周围没有太多的文档。该项目的新家是here,在scripts下,您会发现一个相当广泛的集合,但它实际上只是您发布的链接的更新版本。
    • @nhed 你是对的。我更正了答案。谢谢!
    【解决方案2】:

    不需要“+”号。直接说

    port_num="/dev/ttyUSB$1"
    

    【讨论】:

    • 我也试过了。没用。这是否意味着kermit 脚本与bash 脚本不同?
    • 是的,一个 X 脚本,通常是为名为 X 的解释器程序编写和执行的脚本。第一行的 hashbang (#!),虽然被格式化为注释,但允许执行位设置为在指定解释器下运行的文件。
    猜你喜欢
    • 2016-08-03
    • 2014-09-14
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多