自动化命令行
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 所建议的,您还可以使用进程替换并避免创建临时文件。
我执行了以下 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 所建议的,您还可以使用进程替换并避免创建临时文件。