自动化命令行

Automate command lines

我执行了以下 cmd 行,现在我需要将它放在一个脚本中,我可以调用并将 file1、file2、file3 作为参数传递。

sort file1.csv > file1.csv.sorted
sort file2.csv > file2.csv.sorted 
diff --speed-large-files \
  file1.csv.sorted \
  file2.csv.sorted \
  > file3.difftmp
rm file1.csv.sorted
rm file2.csv.sorted

我已尝试创建 bash 脚本,但以下 eval 不起作用:

s="diff --speed-large-files $file1.csv.sorted $file2.csv.sorted > $file3"
eval s

我不一定需要创建 bash 脚本,但我需要自动执行此过程,以便其他进程可以调用它并传递参数。

我想,你可以这样做

k=$(s)

所以k是一个变量,存储命令s返回的结果。如果要使用字符串作为 s 命令,请执行 $("cmd")

当您使用 bash 时,您可以利用进程替换:

#!/bin/bash
diff --speed-large-files <(sort "") <(sort "")

您可以将这两个文件名作为参数传递给脚本。这避免了临时文件的创建和手动清理的需要。

不要在这里使用eval;一个简单的函数就足够了:

filediff() {
   sort "".csv > "".csv.sorted
   sort "".csv > "".csv.sorted 
   diff --speed-large-files "".csv.sorted "".csv.sorted > "".difftmp
   rm "".csv.sorted
   rm "".csv.sorted
}

正如 Tom Fenech 所建议的,您还可以使用进程替换并避免创建临时文件。