如何将多个参数传递给在screen命令中调用的脚本?

时间:2018-12-04 04:51:53

标签: bash arguments gnu-screen

我正在创建一个分离的屏幕播放器,它运行脚本player.sh,该脚本具有来自AR数组的多个参数。

AR=('foo' 'bar' 'space' 'bat')
screen -S player -dm bash -c "/home/deanresin/scripts/player.sh ${AR[@]}"

但是它被解析为...

+ screen -S player -dm bash -c '/home/deanresin/scripts/player.sh foo' bar space bat

,只有第一个参数foo被传递给player.sh。

如果我手动输入数组,它将起作用。

screen -S player -dm bash -c "/home/deanresin/scripts/player.sh foo bar space bat"

+ screen -S player -dm bash -c '/home/deanresin/scripts/player.sh foo bar space bat'

它们都被传递给player.sh。

请帮助,我一直在拔头发。

编辑:

我也尝试过。.

screen -S player -dm bash -c "/home/deanresin/scripts/player.sh "`echo "${AR[@]}"`

具有相同的不良结果。

1 个答案:

答案 0 :(得分:2)

如果您不尝试通过bash -c添加间接地址,则会更容易:

screen -S player -dm /home/deanresin/scripts/player.sh "${AR[@]}"

如果您确实需要将其嵌套在bash -c中,则应正确地转义参数并将它们连接为单个参数:

screen -S player -dm bash -c "/home/deanresin/scripts/player.sh $(printf "%q " "${AR[@]}")"

或将它们作为单独的参数传递,并在脚本字符串本身中以$@的形式提供,请仔细引用该引数以确保其为文字:

screen -S player -dm bash -c '/home/deanresin/scripts/player.sh "$@"' _ "${AR[@]}"

错误的解决方案是使用bash -c "/home/deanresin/scripts/player.sh ${AR[*]}"来连接所有元素而不进行转义,但这并不能解释shell元字符,因此最好避免。