Bash 自动化命令行

Bash 自动化命令行,bash,automation,Bash,Automation,我执行下面的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.

我执行下面的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脚本,但以下评估不起作用:

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

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

我想,你可以

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
k=$(s)

因此k是一个变量,其中存储了从命令s返回的结果。如果您想使用字符串作为s命令,可以使用$cmd

k=$(s)

因此k是一个变量,其中存储了从命令s返回的结果。如果要使用字符串作为s命令,请在使用bash时执行$cmd

,您可以利用进程替换:

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

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

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

#!/bin/bash
diff --speed-large-files <(sort "$1") <(sort "$2")
您可以将这两个文件名作为参数传递给脚本。这避免了创建临时文件和手动清理的需要。

此处不使用eval;一个简单的函数就足够了:

filediff() {
   sort "$1".csv > "$1".csv.sorted
   sort "$2".csv > "$2".csv.sorted 
   diff --speed-large-files "$1".csv.sorted "$2".csv.sorted > "$3".difftmp
   rm "$1".csv.sorted
   rm "$2".csv.sorted
}
正如Tom Fenech所建议的,您还可以使用进程替换,避免创建临时文件。

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

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

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

因此,其他进程可以调用它并传递参数,这正是脚本的含义。所以其他进程可以调用它并传递参数,这正是脚本的含义。这是一个很好的建议。然而,当我在两个16GB和17GB的大型文件上运行diff时,我在使用进程替换时耗尽了内存。@Edijs处理这种大小的文件时,内存耗尽并不奇怪!这是个好建议。然而,当我在两个16GB和17GB的大型文件上运行diff时,我在使用进程替换时耗尽了内存。@Edijs处理这种大小的文件时,内存耗尽并不奇怪!