Bash

如何遍歷文件並執行行

  • March 18, 2021

我有一個文本文件,其中包含用於從數據庫中獲取一些數據的 bash 命令。每個命令都用換行符分隔。請參見下面的範例:(命令也可能是“ls -l”、“cat 不管什麼.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

您的命令列表實際上是一個 shell 腳本,即使沒有 shebang(#!/bin/bash頂部的行)。您可以將其指定為 shell 的參數,shell 將執行它,一次一行,等待執行完成:

bash my_commands.txt

或者,如果您的命令實際上不需要bash

sh my_commands.txt

bash腳本是

  1. 按行順序執行
  2. 除非你不這樣做

#!/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?"

如您所見,在後一種情況下,通過發送使命令成為後台程序,命令或多或少是並行執行的&

引用自:https://unix.stackexchange.com/questions/639859