我如何模拟行为"如果未给出输出文件,则打印到stdout"在我自己的BASH脚本中?
我想模仿,例如, unix实用程序sort
:
sort input
# prints to stdout
sort -o out input
# prints to file "out". does not print to stdout.
可悲的是,我唯一想到的是,在我的BASH脚本的最后:
if [ ! -z "$OUT" ]; then
some | commands > $OUT
else
some | commands
# prints to stdout
fi
答案 0 :(得分:1)
如果您的异议是重复命令,如果没有给出其他文件名,您可以在重定向中使用/dev/stdout
作为文件名。
output=${OUT:-/dev/stdout}
some | commands > "$output"
答案 1 :(得分:1)
如果我理解正确,您希望将shell脚本中的所有输出重定向到日志文件,如果" -o"存在或打印到stdout。请尝试以下脚本,
#!/bin/bash
OPTIND=1
LOG_FILE=""
while getopts "o:" opt; do
case "$opt" in
o) LOG_FILE=$OPTARG
;;
esac
done
shift $((OPTIND-1))
[ ! -z $LOG_FILE ] && exec >$LOG_FILE
echo "This line will be inside log file if -o <filename> is given"
如果您将上述脚本命名为&#34; parse.sh&#34;,则应使用
./parse.sh -o output.txt #This will store all logs/echos inside "output.txt"
./parse.sh #This will print all the logs/echos to stdout
如果您不使用多个输入参数,甚至可以直接访问&#34; $ 1&#34;
,您甚至可以避免使用getopts