【问题标题】:Multi-word Bash Script Arguments passed to Detached Screen传递给分离屏幕的多字 Bash 脚本参数
【发布时间】:2023-03-19 20:15:01
【问题描述】:

我正在尝试使用一个非常小的 bash 脚本将命令传递到 Linux 中的分离屏幕。
目前屏幕已分离,我可以使用下面的 bash 脚本向屏幕发送命令。

#!/bin/bash
COMMAND=$1;
screen -S "detachedscreen" -X stuff $COMMAND`echo -ne '\015'`

当参数超过 1 个单词时就会出现问题。

在参数周围添加单引号或双引号并不能解决问题。

当多个单词参数被发送到分离的屏幕时,它会抛出以下错误。

-X: STUFF: invalid option firstArgument

如何向 bash 发送多个单词参数而不抛出此错误?

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:

    您的问题晦涩难懂,但听起来您的论点应该适当分开。如果它们是 shell 命令,您可以使用分号和换行符。如果接收程序需要换行符分隔的输入,那么首先,您需要在脚本中正确引用:

    #!/bin/bash
    COMMAND=$1;
    screen -S "detachedscreen" -X stuff "$COMMAND"`echo -ne '\015'`
    

    也可以重构为接受多个参数:

    #!/bin/bash
    screen -S "detachedscreen" -X stuff "$@"$'\015'
    

    当然,您需要传入以换行符分隔的命令,例如

    yourscript "hello
    buy
    more
    beans"
    

    如果您希望脚本始终在参数之间粘贴换行符,那么您可以说

    yourscript hello buy more beans
    

    你也可以做到:

    #!/bin/bash
    commands=$(printf '%s\n' "$@")
    screen -S "detachedscreen" -X stuff "$commands"$'\015'
    

    如果每个命令都应该有 DOS 回车,试试

    #!/bin/bash
    commands=$(printf '%s\r\n' "$@")
    screen -S "detachedscreen" -X stuff "$commands"
    

    现在,如果你想要一个带有空格的字符串,只需引用它

    yourcommand hello "buy more beans"
    

    将发送hello,然后在一行中发送buy more beans

    【讨论】:

    • 我已经为其他人澄清了我的问题,并发现您确实回答了这个问题。将我的 bash 脚本更改为您的第一个建议 "$@"$'\015 意味着该参数按原样采用。谢谢你
    猜你喜欢
    • 2021-11-18
    • 2012-12-29
    • 1970-01-01
    • 2011-09-09
    • 2016-09-15
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多