我尝试使用shell脚本从名为keycloak的服务中导出一些配置,为此,将从管道中运行该脚本,管道需要连接到远程计算机,然后连接到k8s群集并在其中运行命令。一切正常,导出工作正常,但我尝试使用exit退出k8s群集并直接结束shell脚本,否则它将移回管道主机而不停留在远程计算机中。
从管道运行命令
ssh -t ubuntu@example1.com 'bash' < export.sh
导出.sh
#!/bin/bash
set -x
set -e
rm -rf /tmp/realm-export
if [ $(ps -ef | grep "keycloak.migration.action=export" | grep -v grep | wc -l) != 0 ]; then
echo "Another export is currently running"
exit 1
fi
kubectl -n keycloak exec -it keycloak-0 bash
mkdir /tmp/export
/opt/jboss/keycloak/bin/standalone.sh -Dkeycloak.migration.action=export -Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=/tmp/export -Dkeycloak.migration.usersExportStrategy=DIFFERENT_FILES -Djboss.socket.binding.port-offset=100
rm /tmp/export/master-*
exit
kubectl -n keycloak cp keycloak-0:/tmp/export /tmp/realm-export
exit
exit
scp ubuntu@example1.com:/tmp/realm-export/* ./configuration2/realms/
第一次退出后整个shell脚本停止了它不会停留在www.example.com上ubuntu@example1.com有什么解决办法吗?
1条答案
按热度按时间yquaqz181#
使用HEREDOC(EOF)在不使用交互式环境的情况下运行内部命令。
它不是
EOF
。它是'EOF'
。这可以防止变量在当前shell中展开。但在其他脚本中的
/tmp/export/master-*
会按您的预期展开。export.sh
无论
scp
是否成功运行,此代码都将退出。