sshとcdコマンドを一緒に使用するには?

sshとcdコマンドを一緒に使用するには?

リモートGitリポジトリを更新するためにbashスクリプトを作成しようとしています。スクリプトは次のとおりです。

#!/bin/bash
ssh [email protected] 'cd /home/h/usr/praktikum  | git pull | sbatch run.sh'

しかし、このcdコマンドはうまくいきません!

致命的:gitリポジトリ(またはマウントポイント/ホームより前の親リポジトリ)ではありません。

gitフォルダにどのように入りますか:/home/h/usr/praktikumgitコマンドを実行しますか?

答え1

Pipe( |) は、パイプラインで複数のコマンドの入力と出力を結合するために使用されます。これらのコマンドは、入力が表示されるのを待つか、出力を読み取る場合を除いて、互いに独立して同時に実行されます。これが、コマンドがcd現在のディレクトリに影響しない理由です。ここではパイプを使用したくありません。gitsbatch

あなたがしたいことは

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"

関連情報