无法使用 cat 和 <<EOF 通过 SSH 远程创建文件



我正在尝试使用以下命令通过 ssh 远程创建一个文件:

ssh $REMOTE_USER@$REMOTE_HOST "
    cat > hooks/post-receive <<EOF
    #!/bin/bash
    git checkout -f
    EOF
    chmod +x hooks/post-receive
"

当我在远程服务器上使用cat repo.git/hooks/post-receive检查文件时成功执行后,我看到以下结果:

#!/bin/bash
git checkout -f
EOF
chmod +x hooks/post-receive

我希望EOFchmod +x hooks/post-receive不会出现在post-receive文件中。可以做些什么来解决这个问题。

man bash

此处文档

这种类型的重定向指示 shell 从当前源读取输入,直到看到仅包含分隔符(没有尾随空格)的行

如果重定向运算符为 <<-,则会从输入行和包含分隔符的行中删除所有前导制表符。 这允许 shell 脚本中的 here-文档以自然的方式缩进。

因此,您需要从"在此处"文档中删除尾随空格或用制表符替换它们。

ssh $REMOTE_USER@$REMOTE_HOST "
cat > hooks/post-receive <<EOF
#!/bin/bash
git checkout -f
EOF
chmod +x hooks/post-receive"
# or,
ssh $REMOTE_USER@$REMOTE_HOST "
cat > hooks/post-receive <<-EOF
    #!/bin/bash
    git checkout -f
    EOF
    chmod +x hooks/post-receive"

最新更新