원격 Git 저장소를 업데이트하기 위해 bash 스크립트를 작성하려고 합니다. 스크립트는 다음과 같습니다:
#!/bin/bash
ssh [email protected] 'cd /home/h/usr/praktikum | git pull | sbatch run.sh'
그러나 이 cd
명령은 효과가 없습니다!
치명적: git 저장소(또는 마운트 지점/home 이전의 상위 저장소)가 아닙니다.
git 폴더에 어떻게 들어가나요: /home/h/usr/praktikum
git 명령을 실행하나요?
답변1
Pipe( |
)는 파이프라인에서 여러 명령의 입력과 출력을 함께 결합하는 데 사용됩니다. 이러한 명령은 입력이 나타나기를 기다리거나 출력을 읽는 경우를 제외하고 서로 독립적이며 동시에 실행됩니다. 이것이 및 명령이 cd
현재 디렉토리에 영향을 미치지 않는 이유입니다. 여기서는 파이프를 사용하고 싶지 않습니다.git
sbatch
당신이 하고 싶은 일은
ssh [email protected] 'cd /home/h/usr/praktikum && { git pull; sbatch run.sh; }'
이것이 수행하는 작업은 cd
지정된 디렉토리에 액세스하고 모든 것이 제대로 진행되면(디렉토리가 존재하고 해당 디렉토리에 액세스할 수 있는 경우) git
및 명령을 실행하는 것입니다.sbatch
위 명령에서는 sbatch
종료 상태에 관계없이 실행됩니다 git pull
. 어떤 이유로든 실패할 경우 실행을 sbatch
피하려면 다음을 사용하세요.git
ssh [email protected] 'cd /home/h/usr/praktikum && git pull && sbatch run.sh'
답변2
이것은 나에게 효과적입니다.
ssh [email protected] -t "cd /home/h/usr/praktikum && git pull && sbatch run.sh; bash --login"
원격 쉘에 들어가지 않기 때문입니다.
ssh [email protected] -t "cd /home/h/usr/praktikum && git pull && sbatch run.sh"