サーバーの更新プロセスを自動化しようとしています。これがする必要があるのは、ファイルを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にログイン、削除、または実行したい他のコマンド)の後にシェルがハングすることです。私は無限に待っている空行を取得します。原因は何か知っていますか?
答え1
情報が処理されると、update_frontend_cmd.sh
入力は完了します。 sshは単にキーボード入力に戻りません。
リモートシステムでスクリーンセッションを実行し、そこからコマンドを実行することを検討できます。完了したら再接続してください。
より簡単な方法は、スクリプトをサーバーにプッシュし(scp
またはより良い方法はpushを介してgit
)ローカルで実行することです。
答え2
コール-t
からオプションを省略すると、ssh
そのオプションに達するとセッションは終了します。EOF
stdin
答え3
これは私にとって効果的です。
( echo 'echo yes'; echo 'exit') | ssh me@localhost -t -t 'bash -s'
.echo 'echo yes'
cat
ヤヨン。