如何让Shell脚本P2识别输入重定向以调用不同参数的Python脚本
解决方案
核心判断逻辑
在Shell环境中,可通过[ -t 0 ]检测标准输入(文件描述符0)是否连接到终端:
- 返回真(退出码0):输入来自终端,无重定向
- 返回假(退出码非0):输入被重定向(来自文件、管道等)
完整P2 Shell脚本
#!/bin/bash # 处理带文件名参数的情况 if [ $# -eq 1 ]; then python P2.py "$1" else # 判断输入是否被重定向 if ! [ -t 0 ]; then # 传递重定向的输入给Python脚本 python P2.py <&0 else # 无参数且无重定向的情况 python P2.py fi fi
代码说明
#!/bin/bash:指定脚本使用bash解释器[ $# -eq 1 ]:判断命令行参数数量为1,对应P2 someFile的调用场景! [ -t 0 ]:取反判断标准输入非终端,对应P2 < someFile的重定向场景<&0:将当前脚本的标准输入直接传递给Python脚本,无需显式指定文件名(重定向的文件名由调用者指定,脚本无需感知)
验证方式
- 执行
./P2:触发无参数无重定向逻辑,调用python P2.py - 执行
./P2 test.txt:触发带参数逻辑,调用python P2.py test.txt - 执行
./P2 < test.txt:触发重定向逻辑,将test.txt内容传入python P2.py
内容的提问来源于stack exchange,提问作者wolfeweeks
相关产品推荐
相关产品推荐

