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

Bash中source脚本文件时,如何显示当前执行的命令及其输出

这有几个实用的办法能帮你实现需求,咱们一步步来看:

方法1:用set -v内置命令(最简便可靠)

Bash自带的set -v选项会让shell在读取到命令的瞬间就把命令本身打印出来,之后再执行命令并输出结果,完美匹配你想要的效果。

有两种使用姿势:

方式A:修改原脚本(永久生效)

直接在你的test.sh开头加上set -v,结尾用set +v关闭(避免影响后续的shell操作):

# 开启命令打印模式
set -v
echo "hello"
echo "world"
# 关闭命令打印,恢复默认
set +v

之后执行source test.sh,输出就会是:

echo "hello"
hello
echo "world"
world

方式B:临时开启(不修改原脚本)

如果不想动原脚本,你可以在source的时候临时开启set -v,执行完立刻关闭:

set -v; source test.sh; set +v

方法2:自定义逐行处理脚本(适合灵活扩展)

要是你需要过滤掉注释、空行,或者对命令做额外处理,可以写个小脚本逐行读取原脚本内容,先打印命令再执行:

比如创建一个run_with_echo.sh:

#!/bin/bash
script="$1"
[[ ! -f "$script" ]] && { echo "Error: File $script not found"; exit 1; }

while IFS= read -r line; do
    # 跳过空行和注释行
    if [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]]; then
        continue
    fi
    # 先打印命令
    echo "$line"
    # 执行命令
    eval "$line"
done < "$script"

给它加执行权限:chmod +x run_with_echo.sh,然后运行:./run_with_echo.sh test.sh,同样能得到你要的输出。

⚠️ 注意:这个方法用到了eval,如果原脚本里有复杂命令(比如管道、特殊字符、变量嵌套),可能会出现意外问题,所以优先推荐方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:14:58