我试图在循环中多次在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
答案 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"