[解決済み] Bashでsshして複数のコマンドを実行する最もクリーンな方法は何ですか?
質問
すでにsshエージェントを設定しており、Bashスクリプトで外部サーバーにコマンドを実行することができるのですが、以下のようなことができます。
ssh blah_server "ls; pwd;"
さて、私が本当にやりたいことは、外部のサーバーで長いコマンドをたくさん実行することです。これらすべてを引用符で囲むと非常に醜くなりますし、これを避けるために何度もsshをするのは避けたいところです。
そこで、括弧などで囲んで一気にできる方法はないでしょうか?というようなものを探しています。
ssh blah_server (
ls some_folder;
./someaction.sh;
pwd;
)
基本的には、クリーンであれば、どんなソリューションでもいいと思います。
編集
はっきり言って、これはより大きなbashスクリプトの一部であることを話しています。他の人がこのスクリプトを扱う必要があるかもしれないので、きれいな状態にしておきたいと思います。私は、次のような1行のbashスクリプトを持ちたくはないのです。
ssh blah_server "ls some_folder; ./someaction.sh 'some params'; pwd; ./some_other_action 'other params';"
というのも、非常に醜く、読みにくいからです。
解決方法は?
Bashはいかがでしょうか? こちらのドキュメント :
ssh otherhost << EOF
ls some_folder;
./someaction.sh 'some params'
pwd
./some_other_action 'other params'
EOF
コメントで@Globalzが言及した問題を回避するために、(リモートサイトで何をしているかによりますが)最初の行を次のように置き換えることができるかもしれません。
ssh otherhost /bin/bash << EOF
なお、Here文書では変数の置換が可能ですが、クオートの問題に対処しなければならない場合があります。例えば、"limit string" を引用した場合 (つまり、.
EOF
の場合)、変数の代入ができなくなります。しかし、制限文字列をクォートしなければ、変数は代入されます。たとえば、次のように定義した場合
$NAME
上記のシェルスクリプトで、次のようにします。
ssh otherhost /bin/bash << EOF
touch "/tmp/${NAME}"
EOF
というファイルを作成します。
otherhost
に割り当てた名前になります。
$NAME
. シェルスクリプトの引用に関する他のルールも適用されますが、ここでは複雑すぎるため割愛します。
関連
-
[解決済み] usr/bin/env bash」と「#!/usr/bin/bash」の違いは何ですか?
-
[解決済み] rsyncです。--include-from vs. --exclude-from 実際の違いは何ですか?
-
[解決済み] echoコマンドでパイピングが効かない [重複]。
-
[解決済み] bash スクリプトを実行しているドッカーエントリーポイントが "パーミッション拒否" になる
-
[解決済み] プロジェクトからすべての .pyc ファイルを削除するにはどうすればよいですか?
-
[解決済み] ConcatenationとAppendの違いについて【終了しました
-
[解決済み] "[0: コマンドが見つかりません]" in Bash [重複].
-
[解決済み] time(1) の出力における 'real', 'user' および 'sys' はどのような意味ですか?
-
[解決済み] 好ましいBashのシェバングとは?
-
[解決済み] シンボリックリンクとハードリンクの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 部分的にコピーされたファイルでscpを再開する方法は?[クローズド]です。
-
[解決済み] Docker ubuntu イメージ - bash: man: コマンドが見つかりません。
-
[解決済み] bashの文字列の等値性テストで、予期しない演算子エラーが発生するのはなぜですか?重複
-
[解決済み] zip警告 - 名前が一致しない
-
[解決済み] Curl:応答を待たない[重複]。
-
[解決済み] bash スクリプトを実行しているドッカーエントリーポイントが "パーミッション拒否" になる
-
npm err インストールエラーの解決策
-
解決策:bash: /root/.bashrc: パーミッションが拒否されました
-
[解決済み] MINGW64 "make build" エラー。"bash: make: コマンドが見つかりません"
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?