update_frontend.sh

update_frontend.sh

我正在尝试自动化服务器更新过程。这应该做的是检查git diff文件并列出它们,以便稍后从一个地方复制到另一个地方。

这是我在本地计算机上的脚本:

update_frontend.sh

#!/bin/sh
ssh [login details] -t -t 'bash -s' < ~/Scripts/update_frontend_cmd.sh

update_frontend_cmd.sh

SOURCE=/var/www/git_front/mydir_front
TARGET=/var/www/front
dothis=

cd "$SOURCE"
for i in $(git diff --name-only origin/master master)
    do
    x=`echo $i | sed 's/mydir\///'`
        dothis=`echo "
$dothis
cp './mydir/$x' '$TARGET/$x'"`
    done

git pull
eval $dothis

问题是,在我第一次输入后(无论是登录 git pull,还是删除它,我尝试执行的任何其他命令)都会导致 shell 挂起。我只是得到一个空行无限的等待。知道是什么原因造成的吗?

答案1

处理完您的信息后update_frontend_cmd.sh,您就完成了输入。 ssh 不会简单地切换回键盘输入。

您可以考虑在远程计算机上运行屏幕会话并在其中执行命令。完成后重新连接。

一种更简单的可能性是将脚本推送到服务器(scp或者更好地通过推送git)并在本地执行。

答案2

只需省略调用-t中的选项,一旦到达 ,ssh会话就会终止。EOFstdin

答案3

这对我有用:

( echo 'echo yes'; echo 'exit') | ssh me@localhost -t -t 'bash -s'

尝试将 替换echo 'echo yes'为您的cat.

喵。

相关内容