提问人:poiubb22 提问时间:3/11/2022 最后编辑:Daniel Widdispoiubb22 更新时间:10/25/2022 访问量:495
Bash 对 EOF 上的远程服务器执行多个命令
Bash execute multiple command to a remote server on EOF
问:
我尝试从我的终端,在远程服务器上对 docker 执行 openstack 命令。目的是获取 openstack 项目的 id。
当条件为 true 时,我想获取 id,但下面的脚本无法获取 id。我不知道我是否可以执行 if 条件到 EOF 语句
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
答:
0赞
Rockcat
3/16/2022
#1
您可以避免使用嵌套引号,因为嵌套引号会给您带来问题。
而不是复杂的句子:
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
)
上一个:Bash 循环到文件末尾
评论
$()
在建立 SSH 连接之前在本地计算机上执行。$id_u
$id_p
scp
"
"