Shell脚本:知道何时有重定向输入



我正试图找出一种方法,让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)

我将不胜感激。

#!/bin/sh
if test -n "$1"; then
echo "Your input is : $1";
elif test ! -t 0; then
echo "Read from stdin"
input=$(cat)
echo your input is :  $input;
else
echo "No data provided..."
fi

如您所见,检查是否没有命令行参数和STDIN为空,主要技巧如下:

  • 通过test -n $1检查是否存在第一个参数来检测参数。

  • 然后,检查stdin是否在终端上未打开(因为它被管道连接到文件)是用test ! -t 0完成的(检查文件描述符0(即stdin)是否未打开)。

  • 最后,其他的都落在最后一种情况下(没有提供数据…)。

如果python脚本编写正确,则不需要处理任何内容。只需将脚本参数("$@")传递给python:

#!/bin/sh
python P2.py "$@"

"$@"展开为shell脚本的所有参数(包括在没有参数的情况下展开为无参数)。

Python还继承了shell的任何stdin重定向。

这取决于python脚本是否更喜欢文件参数而不是stdin(常规行为)。

test,使用cat代替python:

#!/bin/sh
cat "$@"
  • 对于./test a b < c,打印ab文件。
  • ./test < c文件c打印
  • 对于./test, cat从终端读取输入

相关内容

  • 没有找到相关文章

最新更新