将输入传递给脚本:标准与 argv 中的文件路径



我编写了许多简单的脚本来测试或处理CSV文件。大多数脚本具有相同的逻辑:读取一个文件并将输出写入控制台或另一个文件。对于这种情况,我通常使用最简单的实现方法:从stdin读取,写入stdout,所以调用是这样的:

script < input.csv > output.csv

你能给出一些观点,为什么我会更喜欢这种风格:

script input.csv > output.csv

甚至:

script input.csv output.csv

下面介绍如何拥有一个处理两者的脚本(不保证 100% 安全,也许有人可以提供更好的选择或在评论中查明严重问题):

#!/bin/bash
if [[ -n $1 ]]; then
    exec "$0" < "$1" || exit $?
fi
# your program starts here, reading stdin, e.g.,
while read; do
   echo "$REPLY"
done
这就是

我现在处理相同任务的方式,类似于@gniourf_gniourf的答案(除了我的脚本在 Haskell 中)。

当程序被调用时,如 CMD INPUT1 [INPUT2 [...]] ,将它们视为输入文件并忽略标准输入,除非-一个或多个参数的特殊情况。

当没有给出参数时,读取标准输入。所以CMD没有参数的调用等同于CMD -.

相关内容

  • 没有找到相关文章

最新更新