无法在while循环中运行交互式hashcat

时间:2016-07-13 16:20:39

标签: linux bash shell

我试图在循环中多次在bash脚本中运行hashcat。我遇到的问题是,因为hashcat是交互式的,所以脚本多次执行它。我想运行第一个hashcat命令,只有当它完成时,第二个应该运行。

脚本示例:

while read dict
do
    hashcat -m 0 -a 0 hashfile.hash $dict
done < dictionary_paths

另外,嵌套while循环怎么样?

例如:

while read rule_right
do
    while read rule_left
    do
        hashcat -m 0 -a 1 hashfile.hash dict.lst dict.lst --rule-right=$rule_right --rule-left=$rule_left
    done < $rule_left_file
done < $rule_right_file

1 个答案:

答案 0 :(得分:3)

这里的直接答案是使用stdin以外的文件描述符:

while IFS= read -r dict <&3; do
    hashcat -m 0 -a 0 hashfile.hash "$dict" # assuming dict is just one argument
done 3< dictionary_paths

3<表示我们在FD 3上打开dictionary_paths,然后read ... <&3在读取操作期间将FD 3重定向到stdin。因此,FD 0 - stdin - 在脚本操作期间仍然指向其原始源(例如终端)。

对于嵌套循环,在每个级别使用不同的FD:

while IFS= read -r rule_right <&3; do
    while IFS= read -r rule_left <&4; do
        hashcat -m 0 -a 1 hashfile.hash dict.lst dict.lst \
                --rule-right="$rule_right" --rule-left="$rule_left"
    done 4<"$rule_left_file"
done 3<"$rule_right_file"