You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中循环执行source ./a.sh以遍历所有PIN码?

解决Bash循环执行source脚本尝试PIN码的问题

你的核心问题是之前的写法没有让source ./a.sh在每次循环中独立执行,导致无法逐个尝试PIN码,下面是问题分析和正确实现方式:

你之前代码的问题

  1. 第一个脚本中,> output.txt会每次覆盖文件内容,最终只会保留最后一次PIN的执行结果;另外管道传递PIN的方式本身没问题,但如果a.sh没有正确读取stdin的内容,也会失效。
  2. 第二个脚本中,所有PIN码通过一次性管道传给source ./a.sh,但source只会执行一次,a.sh只会读取第一行PIN码就结束,后续PIN不会被处理。

正确实现方式

根据a.sh读取PIN码的方式,分两种情况处理:

情况1:a.sh从标准输入(stdin)读取PIN码

如果a.sh是通过read之类的命令从stdin获取PIN,直接在循环内每次单独传递PIN并执行source:

#!/bin/bash

# 初始化输出文件(可选,若要追加结果用>>,覆盖用>)
> output.txt

for pincode in {0000..9999}; do
    echo "尝试PIN: $pincode" >> output.txt
    # 将当前PIN传给a.sh,执行结果追加到输出文件
    echo "$pincode" | source ./a.sh >> output.txt 2>&1
done
  • 2>&1是把错误输出也写入文件,方便排查问题;如果不需要可以去掉。
  • 用>>而不是>,避免每次循环覆盖之前的结果。

情况2:a.sh通过环境变量获取PIN码

如果可以修改a.sh,让它从环境变量读取PIN,这种方式更可靠:
首先修改a.sh,比如用${PINCODE}获取值:

# a.sh中的示例代码
if [ "$PINCODE" = "1234" ]; then
    echo "PIN正确"
else
    echo "PIN错误"
fi

然后主脚本循环设置环境变量并执行source:

#!/bin/bash

> output.txt

for pincode in {0000..9999}; do
    echo "尝试PIN: $pincode" >> output.txt
    # 临时设置环境变量PINCODE,仅在当前source命令生效
    PINCODE="$pincode" source ./a.sh >> output.txt 2>&1
done

额外提示

  • {0000..9999}在Bash中会生成带前导零的4位数字,正好符合PIN码格式。
  • 如果脚本执行速度慢,可以考虑添加&后台执行,但要注意输出冲突,建议用单独的日志文件或者锁机制。

内容的提问来源于stack exchange,提问作者Clientic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:32:13