我无法使用cat和<< eof

时间:2018-12-25 07:13:43

标签: bash ssh

=“”

通过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

我希望EOF文件中不存在chmod +x hooks/post-receivepost-receive。 如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

来自man bash

  

此处文档

     

这种重定向指示外壳程序从当前源读取输入,直到看到仅包含定界符(无尾随空格)的行

     

...

     

如果重定向运算符是<<-,则所有前导制表符将从输入行和包含定界符的行中删除。这样就可以自然地缩进shell脚本中的here-document。

因此,您需要从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"