在shell中为SSH组合管道和here文档

在shell中为SSH组合管道和here文档,shell,ssh,Shell,Ssh,好的,我最近发现了here文档的魔力,它可以将stdin样式的行输入到交互式命令中。然而,我正试图使用SSH在远程服务器上执行一系列命令,但在执行额外命令之前,我还需要通过管道输入一些实际输入,以进一步混淆问题,我还需要返回一些结果;) 以下是我试图使用的: #!/bin/sh RESULT=$(find -type f "$PATH" | gzip | ssh "$HOST" <<- 'REMOTE_SYNC' cat > "/tmp/.temp_file"

好的,我最近发现了here文档的魔力,它可以将stdin样式的行输入到交互式命令中。然而,我正试图使用SSH在远程服务器上执行一系列命令,但在执行额外命令之前,我还需要通过管道输入一些实际输入,以进一步混淆问题,我还需要返回一些结果;)

以下是我试图使用的:

#!/bin/sh
RESULT=$(find -type f "$PATH" | gzip | ssh "$HOST" <<- 'REMOTE_SYNC'
    cat > "/tmp/.temp_file"

    # Do something with /tmp/.temp_file
REMOTE_SYNC
#/垃圾箱/垃圾箱

RESULT=$(find-type f“$PATH”| gzip | ssh”$HOST”不,你不能这样做。herdeoc和管道输入都竞争stdin,只有一个赢。看看这个例子:

echo test | cat << EOF
TEST
EOF
如果可以的话(虽然没有什么意义),左侧命令的输出通过
ssh
管道传输到远程主机,并作为stdin提供

如果希望在通过ssh发送数据时对其进行压缩,可以使用
-C
选项启用压缩


编辑:

在字符串中使用换行符非常好,因此这也很好:

echo TEST | ssh user@host '
    cat > tempfile
    cat tempfile
    rm tempfile
'
与herdoc的唯一区别是必须转义引号


如果您使用类似于
echo-TEST | ssh的东西user@host“$(不,你不能这样做。heredoc和管道输入都在竞争标准输入,只有一个赢。请看这个例子:

echo test | cat << EOF
TEST
EOF
如果可以的话(虽然没有什么意义),左侧命令的输出通过
ssh
管道传输到远程主机,并作为stdin提供

如果希望在通过ssh发送数据时对其进行压缩,可以使用
-C
选项启用压缩


编辑:

在字符串中使用换行符非常好,因此这也很好:

echo TEST | ssh user@host '
    cat > tempfile
    cat tempfile
    rm tempfile
'
与herdoc的唯一区别是必须转义引号


如果您使用类似于
echo-TEST | ssh的东西user@host "$(看起来您正试图重新创建
rsync
;您可能想使用它。看起来您正试图重新创建
rsync
;您可能想使用它。嗯,我希望仍然使用here文档,而不是试图将我的命令压缩到该字符串参数中;我可能必须尝试发送数据并通过stdin将命令作为单个流,因此我只需添加命令来分解它们并运行shell脚本。不过,谢谢!添加了更多示例。我不认为在同一输入流上发送命令和输入不是一个好主意……嗯,我希望仍然使用here文档,而不是试图将我的命令压缩到其中字符串参数;我可能必须尝试通过stdin将数据和命令作为单个流发送,因此我只需添加命令以将其拆分并运行shell脚本。不过,谢谢!添加了更多示例。我不认为在同一输入流上发送命令和输入不是一个好主意。。。