gpt4 book ai didi

linux - 如何在 shell 脚本中使用管道和变量替换(用于切换 haproxy 事件服务器)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:16 24 4
gpt4 key购买 nike

我有一个稍微复杂的操作,我想用 Docker、bash 和 socat 来完成(尽管我欢迎其他解决方案)

我有一个看起来像这样的命令:

$ sudo docker run --rm --volumes-from myhaproxy mytest/socat /bin/bash -c 'echo "set weight server/server-A 1" | socat /var/run/haproxy.sock stdio && echo "set weight server/server-B 0" | socat /var/run/haproxy.sock stdio'

这在命令行中运行良好。如果我想交换 A 和 B,我只需要修改命令。但是,我想在看起来像这样的 shell 脚本中运行它:

sudo docker run --rm --volumes-from myhaproxy mytest/socat /bin/bash -c 'echo "set weight server/server-$current_server 1" | socat /var/run/haproxy.sock stdio && echo "set weight server/server-$inactive_server 0" | socat /var/run/haproxy.sock stdio'

但是对于单引号,变量不会被解释。我只是尝试将 ' 包装在 " 中,就像这样

sudo docker run --rm --volumes-from myhaproxy mytest/socat /bin/bash -c "'echo "set weight server/server-$current_server 1" | socat /var/run/haproxy.sock stdio && echo "set weight server/server-$inactive_server 0" | socat /var/run/haproxy.sock stdio'"

但是我得到一个错误

unexpected EOF while looking for matching `''

那么如何在 shell 脚本中发送这个命令呢? (请注意,我使用的是 sh 而不是 bash)

最佳答案

你不需要那么多引号:

 sudo docker run --rm --volumes-from myhaproxy mytest/socat /bin/bash -c 'echo "set weight server/server-$current_server 1" | socat /var/run/haproxy.sock stdio && echo "set weight server/server-$inactive_server 0" | socat /var/run/haproxy.sock stdio'

可以替换为:

 sudo docker run --rm --volumes-from myhaproxy mytest/socat /bin/bash -c "echo set weight server/server-$current_server 1 | socat /var/run/haproxy.sock stdio && echo set weight server/server-$inactive_server 0 | socat /var/run/haproxy.sock stdio"

echo 打印所有由空格分隔的参数。

如果您需要使用其他命令,其中重要的是将参数分组在一个字符串中,您可以对所有参数使用双引号,并使用 \ 转义内部引号。

 sudo docker run --rm --volumes-from myhaproxy mytest/socat /bin/bash -c "other \"set weight server/server-$current_server 1\" | socat /var/run/haproxy.sock stdio && other \"set weight server/server-$inactive_server 0\" | socat /var/run/haproxy.sock stdio"

但这变得很难很快阅读,在这种情况下,@CharlesDuffy 提出的解决方案更好。

关于linux - 如何在 shell 脚本中使用管道和变量替换(用于切换 haproxy 事件服务器)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27696287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com