我执行以下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脚本,但我需要自动化这个过程,以便其他进程可以调用它并传递参数。
答案 0 :(得分:3)
当您使用bash时,您可以利用流程替换:
#!/bin/bash
diff --speed-large-files <(sort "$1") <(sort "$2")
您可以将两个文件名作为参数传递给脚本。这样可以避免创建临时文件和手动清理。
答案 1 :(得分:3)
不要在这里使用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建议的那样,您也可以使用流程替换并避免创建临时文件。
答案 2 :(得分:0)
我想,你可以做到
k=$(s)
因此k
是一个变量,其中存储了从命令s
返回的结果。如果要将字符串用作s命令,请执行$("cmd")