Multithreading 多线程(bash)时将输出与函数分开

Multithreading 多线程(bash)时将输出与函数分开,multithreading,bash,function,Multithreading,Bash,Function,我正在尝试编写一个.zip密码破解程序(解密一个我忘记了密码的旧.zip文件),我想让它更快 我认为速度限制是通过解压(使用unzip-t-p)来测试密码的。我以为我 如果我复制原始文件并使用密码生成器对其进行测试(直到现在,我只使用seq测试数字,使用generatewords测试单词),可能会使测试速度更快。我的问题是,我不能分别输出数字和“单词” 我这样试过: generate (){ seq 0 999999 & generatewords 5 1 a A } check

我正在尝试编写一个.zip密码破解程序(解密一个我忘记了密码的旧.zip文件),我想让它更快

我认为速度限制是通过解压(使用unzip-t-p)来测试密码的。我以为我 如果我复制原始文件并使用密码生成器对其进行测试(直到现在,我只使用seq测试数字,使用generatewords测试单词),可能会使测试速度更快。我的问题是,我不能分别输出数字和“单词”

我这样试过:

generate (){

seq 0 999999 & generatewords 5 1 a A

}

check (){

generate | while read password; do

unzip -tqqq -P $password $file &>/dev/null

if [ $? = 0 ]; then

echo -e "Password found:\n\n\"$password\"" && exit

fi

done

}
但从逻辑上讲,我只将数字和单词混合作为输出。有没有办法把它们分开,作为下一个函数的参数,这样它就可以处理更多的文件?如果其中一个匹配,脚本应该退出。你能在bash中这样做吗?其他改进也值得欢迎


对不起,我的英语不好,格式也不好:/

是的,您可以使用
$1
从另一个函数运行检查函数

check (){
read password
unzip -tqqq -P $password $file &>/dev/null
if [ $? = 0 ]; then
echo "Password is a $1"
echo -e "Password found:\n\n\"$password\"" && exit
fi;}

generate (){
while true; do
seq 0 999999 | check number
generatewords 5 1 a A | check word
done;}

你可以用任何你想要的方式使用
$1
,就像我做的那样。这只是一个建议

欢迎使用StackOverflow:如果你发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!非常感谢。在帮助中我不知道/理解它,但我下次会这样做。
exit
应该退出整个脚本,所以这个无休止的循环应该会使args变硬一点,我想不出怎么做,所以我决定使用管道阅读