質問: 複数のサーバのソースをアップデート(データの入れ替え)をするため、以下のようなシェルスクリプトを作りました。 ``` #リモート先へシェル転送 cat /var/tmp/remote.sh | ssh ユーザ@ホスト 'cat > /var/tmp/remote.sh' #転送したシェルを実行 ssh ユーザ@ホスト chmod u+x ./remote.sh | ./remote.sh ``` これでリモート先で動作はするのですが、エラーログは誤情報を吐きます。 ローカル入っていないが、リモート先で入っているnode.jsのコマンドが見つからないとログでは言われていながら、実行されていたり、データのコピーも出来ないと言われながらされていたりします。 以下のようなコマンドで直接sshログインしてからシェルを実行すると正常なログが出ます。 ``` ssh ユーザ@ホスト ./remote.sh ``` リモート先のシェルスクリプト実行でログを正常に出すにはどうすればよいのでしょうか?
回答: > > ssh ユーザ@ホスト chmod u+x ./remote.sh | ./remote.sh > > > だと「./remote.sh」がローカル側で実行されてしまっていると思います。 > > ssh ユーザ@ホスト 'chmod u+x ./remote.sh | ./remote.sh' > > > とすべきではないでしょうか? あと、途中のパイプも不要な気がするので > > ssh ユーザ@ホスト 'chmod u+x ./remote.sh && ./remote.sh' > > > のような感じになるのではないでしょうか?