Bash 自动化命令行
我执行下面的cmd行,现在我需要把它放在一个脚本中,我可以调用并传递file1,file2,file3作为参数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.
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处理这种大小的文件时,内存耗尽并不奇怪!