`cat file | ssh host 'cat - >file'` 起什么作用?

`cat file | ssh host 'cat - >file'` 起什么作用?

这是脚本:

#!/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/ironscalescat将的 (=ssh的) 标准输入 ( )重定向-到指定文件

相关内容