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에 로그인하거나 삭제하거나 실행하려는 다른 명령) 후에 쉘이 중단된다는 것입니다. 나는 무한히 기다리는 빈 줄을 얻습니다. 원인이 무엇인지 아시나요?

답변1

정보가 처리되면 update_frontend_cmd.sh입력이 완료됩니다. ssh는 단순히 키보드 입력으로 다시 전환하지 않습니다.

원격 시스템에서 스크린 세션을 실행하고 그곳에서 명령을 실행하는 것을 고려할 수 있습니다. 완료되면 다시 연결하세요.

더 간단한 방법은 스크립트를 서버에 푸시하고( scp또는 더 나은 방법은 push 를 통해 git) 로컬에서 실행하는 것입니다.

답변2

통화 -t에서 옵션을 생략하면 ssh해당 옵션에 도달하면 세션이 종료됩니다.EOFstdin

답변3

이것은 나에게 효과적입니다.

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

.echo 'echo yes'cat

야옹.

관련 정보