通过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-receive
和post-receive
。
如何解决这个问题。
答案 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"