2017-06-04 12 views
0

kornシェルで複数のコマンドを実行して複数のコマンドを実行すると良い方法はありますか?私は関連するquestionに出くわしました。トップの答えが私のために働いていますが、これは/ bin/bash /と指定してkornシェル上で実行します。Ksh、複数のコマンドをsshで実行するより良い方法

以下のコマンドのリストを参照してください(参照された質問の回答からコピーされています)か、kshの方が良いでしょうか?

+0

のエラー状態を追跡し、何もしませんか? (疑わしいときは試してみてください!);エラーが表示されたら...完全な例とエラーを提供してください。 「より良い」というアイデアは何ですか?この例(またはそのリンクの他の例)が解決しないことを達成しようとしているのは何ですか? – markp

+0

@markp質問で伝えられたように私は試しましたが、うまく動作していますので、エラーはありません。コマンドで私は/ bin/bash /を使用していますが、私はkornシェルに入っています。そのため、kshを使用し、bashを使用しない方が良いかどうか聞いています。 – Vipin

+0

私が言ったことは:/ bin/bashを/ bin/ksh(またはあなたのkshへの適切なパス)に置き換え、何が起こるかを見てください。 – markp

答えて

0

使用しているシェルは問題ではありません。私はむしろ答えの1つに提供された解決策に固執したいと考えています。接続の多重化を使用することをお勧めします。

この意味は?別々のsshコマンドを実行しますが、それらはすべて単一のTCP接続で実行されます。

これを達成する方法は?は、同様の内容の~/.ssh/configで設定ファイルを作成します。

Host otherhost 
    ControlPath ~/.ssh/controlmasters/%[email protected]%h:%p 
    ControlMaster auto 
    ControlPersist yes 

をそしてあなたは(接頭辞ssh serverで)ローカルで実行されるようにコマンドを実行します。最初は接続を開始し、もう1つは接続だけを使用します。

+0

ssh /多重化(ssh呼び出しごとに1つのコマンドを仮定した場合)は、連続するコマンドが前のコマンドの結果に依存することができない(つまり、各呼び出しはホームディレクトリで開始されます)。簡単な例:cd/tmp; pwd ...ここでは2行として提出すると、pwdは/ tmpを返します。2つの別々のssh/cmd呼び出しとして提出すると、pwdは/ remote/home/directoryを返します。ここでの解決方法(ここでは文書、ssh /多重化、その他のもの)は、必要なアクションセットを考慮しなければならないことと、それが自分自身の上に立つことができるかどうかということです。 – markp

+1

@markp明らかに、これは欠点かもしれませんが、他者のために環境を混乱させることができないという利点があります。明らかに、コマンド間の依存関係のこの要件は明記されていませんでした。したがって、私は、このドキュメントの醜いbashリダイレクションのオプションとして、この最新のソリューションを提供しています。スクリプトとの対話の名前、他のリダイレクトなど)。 – Jakuje

2

はい、これは機能します。しかし、それ以前のコマンドが失敗した場合、後のコマンドが悪いことをする可能性がある場合は、以前のコマンドが失敗した場合にチェーンを停止するほうがよいでしょう。

1つの簡単な方法は、grepの... Cのトリックは、コマンドが失敗したが起こってチェーンを維持することができます& &

 A && B && { C || true $? } && D

あるいは、

 A && 
    B && 
    { C || true $? } && 
    D

と一緒にチェーンへのコマンドであります一致するものがなければこれを続行する必要があります。引数は$ですか? セットの下で実行されているが、は-xない限り、それはあなたがkshので例を実行しようとしたことがありC.

関連する問題