这是脚本:
#!/bin/bash
usage() {
echo "deploy-nginx.sh --production|--staging"
}
case "$1" in
--staging) NGINX_CONF="conf/nginx-staging"; HOST="staging" ;;
--production) NGINX_CONF="conf/nginx-production"; HOST="production" ;;
*) usage; exit 2;
esac
cat "$NGINX_CONF" | ssh -F conf/ssh_config "$HOST" '
cat - > /tmp/ironscales
sudo cp /etc/nginx/sites-available//tmp/myapp{,-$(date +%Y%m%d-%H%M%S)}
sudo mv /tmp/myapp /etc/nginx/sites-available/myapp
sudo service nginx reload
'
我理解使用函数和case switch
我完全不明白的是 cat 后面的部分
答案1
以下部分cat "$NGINX_CONF"
用于将文件从$NGINX_CONF
变量复制到远程机器ssh
并执行其他操作。
cat "$NGINX_CONF" | ssh
打开文件并将其传递给ssh
进程,这是让 shell 执行相同操作的效率较低的方法<"$NGINX_CONF" ssh
单引号中的部分包含在远程机器上运行的命令。
ssh
将其输入(即文件内容)转发给该命令。cat - > /tmp/ironscales
cat
将的 (=ssh
的) 标准输入 ( )重定向-
到指定文件