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

如何通过Shell执行TXT文件中的命令?脚本仅执行首命令问题排查

为啥只执行第一个命令就停了?

咱们先把问题根源说清楚:你用的exec命令,在shell里的作用是直接替换当前运行脚本的shell进程,不是创建子进程来执行命令。

当脚本第一次循环到exec pwd时,运行这个脚本的bash进程直接变成了pwd进程,pwd输出完当前目录后,这个进程就结束了——后面的循环(要执行ls)、最后的echo "printed"自然都没机会跑了,这就是你只看到pwd结果的原因。

怎么解决?

想要依次执行文件里的所有命令,根本不需要用exec,直接执行命令就行。shell会自动开子进程跑每个命令,跑完后回到原脚本继续循环。

另外,读取文件时给read加个-r参数会更稳妥——它能避免反斜杠被意外转义,还能处理文件末尾没换行的情况。

修改后的完整脚本

echo "pwd" > temp.txt
echo "ls" >> temp.txt
exec < temp.txt
while read -r line
do
    $line
done
echo "printed"

(可选)非要用exec的话?

如果出于某些特殊场景你必须用exec,可以让它启动一个子shell来执行命令,这样就不会干掉原脚本的进程:

echo "pwd" > temp.txt
echo "ls" >> temp.txt
exec < temp.txt
while read -r line
do
    exec bash -c "$line"
done
echo "printed"

不过说实话,这种方法完全没必要,直接执行$line才是最简单高效的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:20:33