如何在运行中的Bash脚本内输出未展开变量的脚本调用命令
Bash运行中获取未展开的原始调用命令方案
核心实现方法
利用Bash内置的BASH_COMMAND特殊变量,该变量会存储当前正要执行的原始命令字符串,未经过任何变量、通配符、别名展开处理。你只需要在脚本的最开头捕获该变量的值即可:
#!/bin/bash # 必须放在脚本所有可执行逻辑的最前面 RAW_COMMAND="$BASH_COMMAND" # 后续任意位置都可以直接调用输出 echo "原始调用命令为:$RAW_COMMAND"
效果验证
假设你执行的调用命令为:./test.sh $USER $HOME/*.log
输出结果会直接展示原始输入:原始调用命令为:./test.sh $USER $HOME/*.log
不会对变量、通配符做任何展开。
注意事项
- 必须把变量捕获逻辑放在脚本最开头,只要前面多了一行其他可执行命令,
BASH_COMMAND的值就会被替换为那行命令的内容,无法拿到脚本的调用命令 - 该方法仅支持Bash 4.0及以上版本,低版本Bash无法正常使用
- 相比读历史记录的方案,该方法在脚本启动瞬间就能拿到结果,不需要等待脚本执行完成,也不受历史记录开关的限制
内容的提问来源于stack exchange,提问作者Joerg Peter
相关产品推荐
相关产品推荐

