Bash 在 EOF 上执行多个命令到远程服务器

发布于 2025-01-13 07:04:49 字数 1421 浏览 2 评论 0原文

我尝试从终端在远程服务器上对 docker 执行 openstack 命令。目的是获取openstack项目的id。

当条件为真时,我想获取id,但下面的脚本无法获取id。我不知道是否可以执行 EOF 语句的 if 条件

ret="$(ssh -qT root@server << EOF
  docker exec openstack bash -c ". adminrc &&
  if [ false ]; then  openstack project create p_ops &>/dev/null
  else :
  fi
  id_u=$(openstack user show u_ops | grep " id" | cut -d "|" -f3 | xargs)
  openstack role add SwiftOperator --project p_ops --user $id_u
  id_p=$(openstack project show p_ops | grep " id" | cut -d "|" -f3|xargs)
  echo "$id_p""
EOF
)"

我得到输出:

Missing value auth-url required for auth plugin password
Missing value auth-url required for auth plugin password
usage: openstack role add [-h]
                          [--system <system> | --domain <domain> | --project <project>]
                          [--user <user> | --group <group>]
                          [--group-domain <group-domain>]
                          [--project-domain <project-domain>]
                          [--user-domain <user-domain>] [--inherited]
                          [--role-domain <role-domain>]
                          <role>
openstack role add: error: argument --user: expected one argument

我想要项目的 id:

echo $id_p
faafe2044c4235ac648faaceae5d1a3bf2a8f7a8ca8a765f5a9621a5e53d9162

I try from my terminal, to execute on remote server a openstack command to a docker. The purpose is to get the id of openstack project.

when condition is true, I want to get id, but the script below failed to get id. I don't know if I can execute if condition to EOF statement

ret="$(ssh -qT root@server << EOF
  docker exec openstack bash -c ". adminrc &&
  if [ false ]; then  openstack project create p_ops &>/dev/null
  else :
  fi
  id_u=$(openstack user show u_ops | grep " id" | cut -d "|" -f3 | xargs)
  openstack role add SwiftOperator --project p_ops --user $id_u
  id_p=$(openstack project show p_ops | grep " id" | cut -d "|" -f3|xargs)
  echo "$id_p""
EOF
)"

I get the output :

Missing value auth-url required for auth plugin password
Missing value auth-url required for auth plugin password
usage: openstack role add [-h]
                          [--system <system> | --domain <domain> | --project <project>]
                          [--user <user> | --group <group>]
                          [--group-domain <group-domain>]
                          [--project-domain <project-domain>]
                          [--user-domain <user-domain>] [--inherited]
                          [--role-domain <role-domain>]
                          <role>
openstack role add: error: argument --user: expected one argument

I desired the id of project :

echo $id_p
faafe2044c4235ac648faaceae5d1a3bf2a8f7a8ca8a765f5a9621a5e53d9162

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无畏 2025-01-20 07:04:49

您可以避免使用会给您带来问题的嵌套引号。

而不是复杂的句子:

openstack user show u_ops | grep " id" | cut -d "|" -f3 | xargs

你可以写:

openstack user show -f value -c id
ret=$(ssh -qT root@server << EOF
  docker exec openstack bash -c ". adminrc &&
  if [ false ]; then openstack project create p_ops &>/dev/null
  else :
  fi
  id_u=$(openstack user show -f value -c id u_ops)
  openstack role add SwiftOperator --project p_ops --user $id_u
  id_p=$(openstack project show -f value -c id p_ops)
  echo $id_p"
EOF
)

You can avoid the use of nested quotes which are giving you problems.

Instead of the complex sentence:

openstack user show u_ops | grep " id" | cut -d "|" -f3 | xargs

you can just write:

openstack user show -f value -c id
ret=$(ssh -qT root@server << EOF
  docker exec openstack bash -c ". adminrc &&
  if [ false ]; then openstack project create p_ops &>/dev/null
  else :
  fi
  id_u=$(openstack user show -f value -c id u_ops)
  openstack role add SwiftOperator --project p_ops --user $id_u
  id_p=$(openstack project show -f value -c id p_ops)
  echo $id_p"
EOF
)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文