私は次のPerlスクリプトを持っています(これはPythonや他のスクリプト言語で動作しますが):script1.pl
、、script2.pl
script3.pl
これらのスクリプトは、ユーザーが入力フラグを使用して実行し、出力が保存されたファイルになるように作成されました。
perl script1.pl --i input1.tsv ## this outputs the file `outputs1`
perl script2.pl --i outputs1 ## this outputs the file `outputs2`
perl script3.pl --i outputs2 ## this outputs the file `final_output`
input1
これで、ユーザーが単に消費し、その代償として出力を取得できる実行可能なbashスクリプトを作成したいと思いますfinal_output
。
Perlスクリプトを使用してこれを行う方法は次のとおりですexecute.sh
。
#!/bin/sh
source ~/.bash_profile
FLAG1="--i=$1"
perl script1.pl $FLAG1
コマンドラインで実行可能execute.sh input1.tsv
3つのスクリプトの例で、中間出力を中間スクリプトにパイプして1つのexecute.sh
スクリプト(outputs1
into script2.pl
、outputs2
intoscripts3.pl
など)を生成するにはどうすればよいですか?
Perl / Pythonスクリプトを再構築せずにこれを行う方法はありますか?
ベストアンサー1
あなたが望むものを示すために書く3行はい有効なbash
スクリプト:スクリプトは、シェルが順番に実行する一連のコマンドにすぎません。
必要な追加コードは、script1.pl
一時ファイルをクリーンアップして生成するだけですscript2.pl
。絶対パスを使用して場所を指定することもできますscript{1,2,3}.pl
。
#!/bin/sh
trap 'rm outputs1 outputs2' EXIT
perl script1.pl --i "$1"
perl script2.pl --i outputs1
perl script3.pl --i outputs2
$1
スクリプトに渡された最初の引数の値を表すため、次のように呼び出されます。
execute.sh input1.tsv
予想通り。
特定の出力ファイルを生成するためにハードコードされているように見えるため、3つのスクリプト間でパイプラインを実際に設定することはできません。