ファイルを繰り返し行を実行する方法

ファイルを繰り返し行を実行する方法

データベースからいくつかのデータをインポートするためのbashコマンドを含むテキストファイルがあります。各コマンドは改行文字で区切られます。以下の例をご覧ください。 (コマンドは「ls -l」、「catwhatever.txt」などです。)

prefetch SRR403012
fastq-dump --fasta 0 SRR403012
my_cpp_program.out SRR403012
...

これらすべてのコマンドを実行するbashスクリプトをどのように作成できますか?私は順番にコマンドを実行したいと思います。しかし!注意すべき点の1つは、多数のファイルをインポートしているため、これらのコマンドが終了するまでに少し時間がかかることです。したがって、forループも実行が完了するのを待つ必要があります。

#!/bin/bash

FILENAME="my_commands.txt"
LINES=$(cat $FILENAME)

for LINE in LINES
do
        execute $LINE
done

答え1

#!/bin/bashコマンドリストは、shebang(一番上の行)がなくても実際にはシェルスクリプトです。これをシェルの引数として指定でき、シェルは実行が完了するまで一度に1行ずつ実行します。

bash my_commands.txt

または、コマンドに実際に必要でないbash場合

sh my_commands.txt

答え2

bashスクリプトは

  1. 行順に実行
  2. しない限り

#!/bin/bashHashbangは、ファイル自体を実行可能にし、それに続くコマンドラインを解釈するためにどのコマンドが使用されたかを表示したい場合にのみ必要です。

だからあなたがすべきことはbash your-command-file

この「コマンドファイル」を確認してください。別の名前で保存commands1して実行bash commands1

echo -n "Hi, "
sleep 1
echo -n "how "
sleep 1
echo -n "are "
sleep 1
echo "you?"

これと比較してください(commands2):

echo -n "Hi, " &
sleep 1 &
echo -n "how " &
sleep 1 &
echo -n "are " &
sleep 1 &
echo "you?"

ご覧のとおり、後者の場合、コマンドはバックグラウンドプロセスに送信され、ほぼ並列に実行されます&

関連情報