シェルに多くのコマンドを送信し、コマンドの終了を待つ方法[終了]


16

約20個のコマンドがあり、これらすべてをUnixシェルに送信して結果をコピーする必要がありますが、その方法はわかりません。

これはモバイルネットワーク管理に接続された小さなプログラムであり、この小さなプログラムではコマンドを行で送信し、結果を悲鳴で受信するためのアクセス権があるため、私が持っているシェルについてはわかりません。そのため、スクリプトを使用することはできませんコマンドを送信します。

コマンド1-サーバーに接続します。

コマンド1が終了するまで待つ

コマンド2-サーバー1からのすべての情報を更新する

待つ。

コマンド3。パラメータを取得します。

...などのコマンド。

私が試したcmd1 | cmd2 | cmd3 し、 cmd1 & cmd2 & cmd3そしてcmd1;cmd2

問題はcmd1、RNC(ネットワーク要素)に接続されていることにcmd2あり、それが理にかなってから15秒ほどかかります。ただし、最初のcmdでのみ機能します。手がかり、これを実行する方法?


3
スクリプトを使用しますか?または&&コマンド間。
ベルンハルト

回答:


20

通常はcmd1;cmd2;cmd3;cmd4(1行で記述したい場合)、またはcmd1 && cmd2 && cmd3 && cmd4cmd2が失敗したときにcmd3を実行したくない場合に使用します。

代わりに、;1行に1つのコマンドを書くこともできます。

cmd1
cmd2
cmd3
cmd4

コマンドをバックグラウンドで並行して実行したい場合は、使用することもできます

cmd1 &
cmd2 &
cmd3 &
cmd4 &
wait # for cmd1-4 to finish

これらのメソッドのいずれかをシェルスクリプトに入れることもできます。シェルスクリプトで記述する内容と実際のシェル自体で記述する内容にはほとんど違いがありません。


MMの問題は、cmd1を送信するときは実際に約6秒で終了する必要があり、cmd2cmd1を送信するときの問題はまだ処理に失敗することです。
ジョナサンラウルタピアロペス

4
このcmd1;cmd2場合(またはcmd1 && cmd2そのことに関して)、cmd1は終了する(したがって、おそらく終了する)までcmd2は実行されません。したがって、問題はないはずです。質問を言い換えるか、人々が実際に再現できる例を提供してください。
frostschutz

質問を修正します。ありがとう
ジョナサンラウルタピアロペス

2

あなたはに見てみたいことがありますsleepお使いの環境で許可されていれば、。完全なシーケンスは次のようになりますcmd1 && sleep 10s && cmd2
これがsleepに関連するmanページです


スリープ/待機は、前のプログラム(バックグラウンドプロセスを生成する可能性がある)が終了して終了するまでの時間を決定的に知っている場合(つまり、停止の問題)、または間隔の後に2番目のコマンドを中断して実行することを保証する場合にのみ役立ちます2つが非同期である場合に発生する可能性がありますが、それらの間にはまだしばらく時間が必要です。ほとんどの場合、それはあなたが望むものではありません。実際には、うまくいくかもしれません。しかし、それは信頼できません。
ジャスティンリーブス

1

スクリプトを使用するだけで、コマンドを含むファイルを次々に実行します。

#!/bin/sh

command-01
command-02
...
command-20

最初の行(shebang)は/bin/sh、を使用して次のコマンドを実行するように指示し、ファイルを実行可能にします(chmod u+x your-little-script./my-little-script。この方法では、いくつかのステップを残しません;-)

シェルのマニュアルを読むと、完全なプログラミング言語が提供されます。bash(1)それが利用可能なものか、Kornシェルかを確認してくださいksh(1)。それらは、スクリプトの制御フローを制御する(またはインタラクティブに)ための多くの便利な機能を提供します。


ありがとう、私はscritpsを使用できません。
ジョナサンラウルタピアロペス

どうして?いずれにせよ、これが非常にファシスト的な環境でない限り、スクリプトsource your-little-script(または. your-little-script略して)を入手できるはずです。
フォンブランド

なぜなら、私はUNIXプログラムに直接アクセスする必要がないので、ミニプログラムのように、cmdを行単位で実行して悲鳴で結果を得ることができます。
ジョナサンラウルタピアロペス

OK、それは少し物事を明確にします...あなたのコマンドの起源/目的地はどんな環境ですか?実行するコマンドを出荷するために何を使用しますか?リモート環境とは何ですか?何が(あなたが経由でアクセスできることを、定期的にアカウントがなければならないのセットアップですsshPuTTY?多分
vonbrand

-1

expectローカルコンピューター上で何かを実行して、cmd1発行cmd2などの前に送信して終了するのを待つことができます。スクリプトを期待します。

もちろん、cmd1; cmd2; cmd3; cmd41つのコマンドでコマンドを順番に実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.