対話型シェルで複数のコマンドを実行する方法

サイレントボックス:

私のアプリケーションは、コンソール(から提供されたシェルコマンドのすべての種類で動作しますcurldateping、何でも)。次に、を使用して、インタラクティブなシェルコマンド(mongoシェルなど)でケースをカバーしますos/exec

  • たとえば、最初のステップとして、mongodbに接続します。 mongo --quiet --host=localhost blog

  • 次に、任意の数のコマンドを実行し、すべてのステップで結果を取得しますdb.getCollection('posts').find({status:'INACTIVE'})

  • その後 exit

以下を試しましたが、mongo接続ごとに1つのコマンドしか実行できません。

func main() {

    cmd := exec.Command("sh", "-c", "mongo --quiet --host=localhost blog")

    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    stdin, _ := cmd.StdinPipe()

    go func() {
        defer stdin.Close()
        io.WriteString(stdin, "db.getCollection('posts').find({status:'INACTIVE'}).itcount()")
        // fails, if I'll do one more here
    }()

    cmd.Run()
    cmd.Wait()
}

複数のコマンドを実行して、実行されたコマンドごとに標準出力結果を取得する方法はありますか?

エイドリアン:

Flimzyが指摘したように、mongoを使用するには、絶対にmongoドライバーを使用する必要があります。shellexecを介してそれと対話しようとしないでください。

ただし、根本的な質問に答えるために、もちろん複数のコマンドを実行できます-できない理由はありません。プロセスの標準入力に書き込むたびに、端末に入力しているようです。TTYに接続されているかどうかを明確に検出するプロセス以外は、秘密の制限はありません。

ただし、コードにはいくつかの問題がありos/execますパッケージのドキュメントを必ず確認してくださいあなたはを呼んcmd.Runでいます、それは:

指定されたコマンドを開始し、完了するまで待機します。

そしてを呼び出すとcmd.Wait、...もコマンドが完了するのを待ちます。これは非常にシリアル化されたプロセスですが、ゴルーチンでstdinパイプに書き込んでいます。パイプに書き込んでコマンドを実行し、結果を取得し、別のコマンドを書き込み、別の結果を取得します...同時実行のみが混乱します。問題なので、ここでは使用しないでください。そして、あなたはコマンドを書き終えたことをモンゴに伝えるために改行を送信していません(シェルで行うのと同じように-モンゴは閉じ括弧に入るとすぐに実行を開始しないので、エンターを押す必要があります) 。

あなたが標準入力/標準出力を介してプロセスと対話するためにしたいと思う(再び、ことを指摘し、これは絶対にデータベースと対話するための方法ではありませんが、可能性があり、他の外部コマンドに対して有効です):

cmd := exec.Command("sh", "-c", "mongo --quiet --host=localhost blog")

cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

stdin, _ := cmd.StdinPipe()

// Start command but don't wait for it to exit (yet) so we can interact with it
cmd.Start()

// Newlines, like hitting enter in a terminal, tell Mongo you're done writing a command
io.WriteString(stdin, "db.getCollection('posts').find({status:'INACTIVE'}).itcount()\n")
io.WriteString(stdin, "db.getCollection('posts').find({status:'ACTIVE'}).itcount()\n")

// Quit tells it you're done interacting with it, otherwise it won't exit
io.WriteString(stdin, "quit()\n")

stdin.Close()

// Lastly, wait for the process to exit
cmd.Wait()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SSHコマンドの実行がハングするが、対話型シェルは正常に機能する

分類Dev

シェルで1行に複数のコマンドを実行する

分類Dev

tsystemコンポーネントのtalendで複数のシェルコマンドを実行する方法

分類Dev

同じシェルgolangで複数のExecコマンドを実行する

分類Dev

Pythonはシェルで複数行のコマンドを実行します

分類Dev

zsh でファイル内のすべてのコマンドを対話的に実行する方法は?

分類Dev

PowerShellで複数のファイルに対してコマンドを実行する方法

分類Dev

Scrapy Shell:シェルで複数行のコードを実行する方法は?

分類Dev

Python-複数のシェルコマンドを次々に実行する

分類Dev

bashシェルからpsqlコマンドを使用して複数のクエリを実行する方法は?

分類Dev

gnomeシェルを起動し、スクリプトから複数のコマンドを実行する方法

分類Dev

1行で複数のコマンドを実行する方法

分類Dev

Pythonシェルでbashの複雑なfindコマンドを実行する

分類Dev

複数のタブを開き、シェルスクリプトでコマンドを実行する

分類Dev

`find`と` xargs`を使用してシェルスクリプトで複数のコマンドを実行する

分類Dev

サブシェルを生成せずにbashで複数のコマンドを実行する

分類Dev

単純なsshで同じシェルを使用して複数のコマンドを実行する

分類Dev

複数のマシンでgearmanWorkerPHPコードを実行する

分類Dev

新しいシェルで複数のコマンドをバッチ実行する

分類Dev

複数のアクティブなシェルで同時にコマンドを実行する

分類Dev

grepコマンドで複数のANDを実行する方法

分類Dev

JavaScriptでシェルコマンドを実行する方法

分類Dev

awk内でシェルコマンドを実行する方法

分類Dev

STARTコマンドで複数のコマンドを実行する方法

分類Dev

GoSublimeのコマンドシェルで「実行」を終了する方法

分類Dev

別のシェルでコマンドを実行する方法は?

分類Dev

複数のファイルに対してtabixコマンドを実行するためのシェルスクリプト

分類Dev

通常のシェルコマンドのようにコマンドラインでGHCiを実行する方法

分類Dev

C ++はシェルでタイマーを使用して複数のコマンドを実行します

Related 関連記事

  1. 1

    SSHコマンドの実行がハングするが、対話型シェルは正常に機能する

  2. 2

    シェルで1行に複数のコマンドを実行する

  3. 3

    tsystemコンポーネントのtalendで複数のシェルコマンドを実行する方法

  4. 4

    同じシェルgolangで複数のExecコマンドを実行する

  5. 5

    Pythonはシェルで複数行のコマンドを実行します

  6. 6

    zsh でファイル内のすべてのコマンドを対話的に実行する方法は?

  7. 7

    PowerShellで複数のファイルに対してコマンドを実行する方法

  8. 8

    Scrapy Shell:シェルで複数行のコードを実行する方法は?

  9. 9

    Python-複数のシェルコマンドを次々に実行する

  10. 10

    bashシェルからpsqlコマンドを使用して複数のクエリを実行する方法は?

  11. 11

    gnomeシェルを起動し、スクリプトから複数のコマンドを実行する方法

  12. 12

    1行で複数のコマンドを実行する方法

  13. 13

    Pythonシェルでbashの複雑なfindコマンドを実行する

  14. 14

    複数のタブを開き、シェルスクリプトでコマンドを実行する

  15. 15

    `find`と` xargs`を使用してシェルスクリプトで複数のコマンドを実行する

  16. 16

    サブシェルを生成せずにbashで複数のコマンドを実行する

  17. 17

    単純なsshで同じシェルを使用して複数のコマンドを実行する

  18. 18

    複数のマシンでgearmanWorkerPHPコードを実行する

  19. 19

    新しいシェルで複数のコマンドをバッチ実行する

  20. 20

    複数のアクティブなシェルで同時にコマンドを実行する

  21. 21

    grepコマンドで複数のANDを実行する方法

  22. 22

    JavaScriptでシェルコマンドを実行する方法

  23. 23

    awk内でシェルコマンドを実行する方法

  24. 24

    STARTコマンドで複数のコマンドを実行する方法

  25. 25

    GoSublimeのコマンドシェルで「実行」を終了する方法

  26. 26

    別のシェルでコマンドを実行する方法は?

  27. 27

    複数のファイルに対してtabixコマンドを実行するためのシェルスクリプト

  28. 28

    通常のシェルコマンドのようにコマンドラインでGHCiを実行する方法

  29. 29

    C ++はシェルでタイマーを使用して複数のコマンドを実行します

ホットタグ

アーカイブ