Linux 通过bash将大变量传递给diff命令

Linux 通过bash将大变量传递给diff命令,linux,bash,diff,Linux,Bash,Diff,我正在写一个脚本,它在论坛web目录上执行校验和(md5sum) 这是一个bash脚本。其思想是对目录中的所有文件进行校验和,然后将其与包含校验和列表的文本文件进行比较 如果我将脚本传递到文本文件中,然后在文本文件和已知校验和列表之间执行diff命令,脚本就会工作,但我不希望它写入文本文件,然后必须在脚本末尾删除文本文件,因此我使用变量 以下脚本失败并出现错误: /usr/bin/diff:参数列表太长 cd /var/www/html/forum/ VAR1=$(find . -type

我正在写一个脚本,它在论坛web目录上执行校验和(md5sum)

这是一个bash脚本。其思想是对目录中的所有文件进行校验和,然后将其与包含校验和列表的文本文件进行比较

如果我将脚本传递到文本文件中,然后在文本文件和已知校验和列表之间执行diff命令,脚本就会工作,但我不希望它写入文本文件,然后必须在脚本末尾删除文本文件,因此我使用变量

以下脚本失败并出现错误: /usr/bin/diff:参数列表太长

cd /var/www/html/forum/


VAR1=$(find . -type d \( -name store_sitemap \) -prune -o -type f -exec md5sum {} \; | grep -v "files\|that\|change")

/usr/bin/diff "${VAR1}" "/root/scripts/forum_checkum_original.txt"
如何传递变量,以便对其运行diff命令

编辑:在用户devnull的帮助下(再次感谢),以下是完整的工作脚本:

cd /var/www/html/forum/

MAIL=$(/usr/bin/diff <(find . -type d \( -name store_sitemap \) -prune -o -type f -exec md5sum {} \; | grep -v "files\|that\|change") /root/scripts/forum_checkum_original.txt)

if [[ -n $(/usr/bin/diff <(find . -type d \( -name store_sitemap \) -prune -o -type f -exec md5sum {} \; | grep -v "files that change") /root/scripts/forum_checkum_original.txt) ]]; then
echo "$MAIL" | mail -s "Forum Checksum" yourmailaddress@yourdomain.com
else
    echo "no files have been changed"
fi
cd/var/www/html/forum/

MAIL=$(/usr/bin/diff
diff
比较文件,而不是变量。请改用进程替换

与您正在尝试做的工作相当的是:

/usr/bin/diff <(find . -type d \( -name store_sitemap \) -prune -o -type f -exec md5sum {} \; | grep -v "bidorbuy.log") /root/scripts/forum_checkum_original.txt

/usr/bin/diff如果要将其保存在变量中,可以通过执行以下操作将变量作为文件描述符提供给diff:

diff <(echo "$MAIL") "/root/scripts/forum_checkum_original.txt"
diff