如何将多个参数传递给屏幕命令中调用的脚本?
How can I pass multiple arguments to script invoked within screen command?
我正在创建一个独立的屏幕播放器,它运行脚本 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[@]}"`
同样不想要的结果。
如果您不尝试通过 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 个元字符,因此最好避免。
我正在创建一个独立的屏幕播放器,它运行脚本 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[@]}"`
同样不想要的结果。
如果您不尝试通过 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 个元字符,因此最好避免。