我编写了许多简单的脚本来测试或处理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 -
.