我试图找出一种方法,让shell脚本知道什么时候输入被重定向,以便用不同的命令行参数运行python脚本。我的shell脚本名为P2
,可能的调用需要是(不幸的是,这方面没有灵活性):
1. P2
2. P2 < someFile
3. P2 someFile
并且理想情况下,shell脚本伪代码的工作方式如下:
if argCount == 2:
run (python P2.py someFile)
else:
if inputWasRedirected: **********_issue is here_**********
run (python P2.py < someFile)
else:
run (python P2.py)
任何帮助都将不胜感激。
2条答案
按热度按时间ybzsozfc1#
正如您所看到的Check if no command line arguments and STDIN is empty,主要技巧如下:
test -n $1
来检测是否有参数,test -n $1
检查第一个参数是否存在。test ! -t 0
检查终端上的stdin是否未打开(因为它通过管道连接到文件)(检查文件描述符零(aka stdin)是否未打开)。ql3eal8s2#
如果python脚本编写正确,就不需要处理任何事情,只需将脚本参数(
"$@"
)传递给python即可:"$@"
扩展到为shell脚本提供的所有参数(包括在未提供参数时扩展为空)。Python也继承了shell的任何stdin重定向。
这取决于python脚本选择文件参数而不是stdin(传统行为)。
例如,
test
,使用cat代替python:./test a b < c
,将打印文件a
和b
。./test < c
,打印文件c
。./test
,cat从终端读取输入。