リモートGitリポジトリを更新するためにbashスクリプトを作成しようとしています。スクリプトは次のとおりです。
#!/bin/bash
ssh [email protected] 'cd /home/h/usr/praktikum | git pull | sbatch run.sh'
しかし、このcd
コマンドはうまくいきません!
致命的:gitリポジトリ(またはマウントポイント/ホームより前の親リポジトリ)ではありません。
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"