如何避免在这个bash脚本中使用临时文件?
作为shell脚本的初学者,我编写了这个bash脚本函数来返回文件的md5sum,同时为用户提供一个GUI进度条如何避免在这个bash脚本中使用临时文件?,bash,pipe,temporary-files,zenity,Bash,Pipe,Temporary Files,Zenity,作为shell脚本的初学者,我编写了这个bash脚本函数来返回文件的md5sum,同时为用户提供一个GUI进度条 md5sum_of_file () { (pv -n $1 | md5sum | sed -e 's/\s.*//g' > /tmp/md5sum) 2>&1 | zenity --progress --auto-close echo $(</tmp/md5sum) rm /tmp/md5sum } md5sum\u文件(){ (p
md5sum_of_file () {
(pv -n $1 | md5sum | sed -e 's/\s.*//g' > /tmp/md5sum) 2>&1 | zenity --progress --auto-close
echo $(</tmp/md5sum)
rm /tmp/md5sum
}
md5sum\u文件(){
(pv-n$1 | md5sum | sed-e's/\s.//g'>/tmp/md5sum)2>&1 | zenity--进度--自动关闭
echo$(我想这就可以了(使用Bash):
zenity
唯一使用的是来自pv
的标准错误,因此使用进程替换来完成此操作,而不涉及来自其他命令的任何stdout或stderr。这使得sed
的输出只需转到标准输出,而不需要
任何临时文件
pv -n "$1" 2> >(zenity --progress --auto-close) | md5sum | sed -e 's/\s.*//g'
为什么不:pv-n$1 | md5sum | sed-e's/\s.//g'| zenity--progress--auto close
你的管道真的很奇怪…所以你有一个可执行文件,它的名称是你正在通过pv
输入的内容的md5和?你想执行它吗?@gniourf|gniourf--oorf抱歉--修复了这个问题。我认为命令替代了n是我尝试将md5sum分配给父shell中的变量时留下的(在我了解子shell中的变量范围之前)。
md5sum_of_file() {
{ { pv -n "$1" | md5sum >&3; } 2>&1 | zenity --progress --auto-close; } 3>&1 | { read -r md5sum _; echo "$md5sum"; }
}
pv -n "$1" 2> >(zenity --progress --auto-close) | md5sum | sed -e 's/\s.*//g'