多字Bash脚本参数传递到分离屏幕

时间:2014-10-30 03:31:22

标签: linux bash shell

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

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

当论证超过1个单词时会出现问题。

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

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

-X: STUFF: invalid option firstArgument

如何在不抛出此错误的情况下向bash发送多个单词参数?

1 个答案:

答案 0 :(得分:2)

你的问题很模糊,但听起来你的论点应该被恰当地分开。如果它们是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