我正在尝试自动化服务器更新过程。这应该做的是检查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
会话就会终止。EOF
stdin
答案3
这对我有用:
( echo 'echo yes'; echo 'exit') | ssh me@localhost -t -t 'bash -s'
尝试将 替换echo 'echo yes'
为您的cat
.
喵。