データベースからいくつかのデータをインポートするための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
スクリプトは
- 行順に実行
- しない限り
#!/bin/bash
Hashbangは、ファイル自体を実行可能にし、それに続くコマンドラインを解釈するためにどのコマンドが使用されたかを表示したい場合にのみ必要です。
だからあなたがすべきことは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?"
ご覧のとおり、後者の場合、コマンドはバックグラウンドプロセスに送信され、ほぼ並列に実行されます&
。