1つのスクリプトで複数のプログラムを実行するには?

1つのスクリプトで複数のプログラムを実行するには?

順番に実行したいプログラムが6つほどあります。これらはすべて異なるディレクトリにあり、独自のデータを持っています。各プログラムを特定の順序で実行するために使用できるスクリプトの助けが必要です。

前の実行の出力が次の実行の入力になるためです。

答え1

プログラムを「チェーン」する方法は2つあります。最初の出力が2番目の出力に渡されるようにそれらを一緒に接続したい場合は、パイプと呼ばれるものを使用する必要があります。別の方法は、単にプログラムを1つずつ実行することです。

パイプラインの例

ここでは、最初のコマンドの出力を取得し、|2番目のコマンドにパイプ()します。

$ echo "output from 1" | grep 1
output from 1

コマンドの出力が画面に表示されますgrep

シリーズコマンド例

ここでは、1つのコマンドを実行してから別のコマンドを実行します。

はい

#!/bin/bash

echo 1
echo 2

上記の内容をというファイルに入れてmycmds.bash実行可能にしてから実行します。

$ chmod +x mycmds.bash
$ ./mycmds.bash
1
2

また、使用することができますサブシェル必要に応じて、プロンプトで一連のコマンドを実行し、その出力をファイルにキャプチャできます。上記のシェルスクリプト方法と同じ方法でコマンドが実行されます。

はい

コマンドを実行するだけです。

$ (echo 1; echo 2; echo 3)
1
2
3

彼らの結果を捉える

$ (echo 1; echo 2; echo 3) | grep 3
3

出力をファイルに取り込む

$ (echo 1; echo 2; echo 3) | tee mycmds.log
1
2
3

$ cat mycmds.log 
1
2
3

答え2

最初の行に最初のプログラムを作成します。

2行目に2番目のプログラムを作成します。

あなたはそれを繰り返します。

答え3

あなたの質問は理解するのが難しいです。を探す管路

書くなら

program1 --option1 | program2 --option2

これにより、コマンドの出力がコマンドへprogram1 --option1の入力として使用されますprogram2 --option2

このようにして複数のプログラムを接続することができます。行が長すぎる場合は、各パイプ記号の後に改行文字を追加できます。

pre-treatment file1.input file2.input file3.input |
some-processing --option=value --other-option |
more-processing |
analyze this --and that |
grep 'interesting stuff'    

バラよりSTDOUTとSTDINを接続することはどういう意味ですか?パイプのたとえ話の直感的な説明

関連情報