我正在尝试使用以下命令通过 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
文件中。可以做些什么来解决这个问题。
从 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"