如何遍历文件并执行行

Gol*_*ver 0 shell bash shell-script text-processing

我有一个文本文件,其中包含用于从数据库中获取一些数据的 bash 命令。每个命令都用换行符分隔。请参见下面的示例:(命令也可以是“ls -l”、“catwhatever.txt”等)

prefetch SRR403012
fastq-dump --fasta 0 SRR403012
my_cpp_program.out SRR403012
...
Run Code Online (Sandbox Code Playgroud)

如何创建一个执行所有这些命令的 bash 脚本?我想要按顺序执行命令的东西。然而!重要的是要注意命令在终止之前需要时间,因为我正在获取大量文件。因此,for 循环也应该等到执行完成。

#!/bin/bash

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

for LINE in LINES
do
        execute $LINE
done
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 5

您的命令列表实际上是一个 shell 脚本,即使没有 shebang(#!/bin/bash顶部的行)。您可以将其指定为 shell 的参数,shell 将执行它,一次一行,等待执行完成:

bash my_commands.txt
Run Code Online (Sandbox Code Playgroud)

或者,如果您的命令实际上并不需要bash

sh my_commands.txt
Run Code Online (Sandbox Code Playgroud)

  • @glennjackman 对要运行的命令做了一些假设;`source my_commands.txt` 比`bash my_commands.txt` 更有可能为用户产生令人惊讶的结果(*例如* 如果`my_commands.txt` 包含`exit` 或`PATH=...` 等)。 (2认同)