我有一个文本文件,其中包含用于从数据库获取一些数据的 bash 命令。每个命令都用换行符分隔。请参阅下面的示例:(命令也可以是“ls -l”、“catwhatever.txt”等)
prefetch SRR403012
fastq-dump --fasta 0 SRR403012
my_cpp_program.out SRR403012
...
如何创建执行所有这些命令的 bash 脚本?我想要按顺序执行命令的东西。然而!需要注意的是,由于我正在获取大量文件,这些命令在终止之前需要一些时间。因此,for 循环也应该等到执行完成。
#!/bin/bash
FILENAME="my_commands.txt"
LINES=$(cat $FILENAME)
for LINE in LINES
do
execute $LINE
done
答案1
您的命令列表实际上是一个 shell 脚本,即使没有 shebang(#!/bin/bash
顶部的行)。您可以将其指定为 shell 的参数,shell 将执行它,一次一行,等待执行完成:
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?"
正如您所看到的,在后一种情况下,通过通过发送使命令后台进程来或多或少地并行执行命令&
。