如何避免在这个bash脚本中使用临时文件?

如何避免在这个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

作为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文件(){
(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'