我可以像这样调用shell脚本:
foo --out-file=build/logs/foo.out --err-file=build/logs/foo.err
并在
中脚本我有类似的东西
#!/bin/bash
OUTFILE=null
ERRFILE=null
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-o|--out-file)
OUTFILE=$2
shift
shift
;;
case $key in
-e|--err-file)
ERRFILE=$2
shift
shift
;;
*)
shift
;;
esac
done
if [ "$OUTFILE" != null ] && [ "$ERRFILE" != null ]
then
ls > $OUTFILE 2>$ERRFILE
elif [ "$OUTFILE" != null ]
then
ls > $OUTFILE
elif [ "$ERRFILE" != null ]
then
ls 2>$ERRFILE
else
ls
fi
有没有办法设置OUTFILE
和ERRFILE
将值保存到STDOUT
/ STDERR
,这样我就可以将它们初始化为({。{{1}如果/ elif / else语句可以避免这样的人吗?
答案 0 :(得分:2)
您可以执行的是使用exec
命令执行重定向,该命令会重定向脚本的其余部分。
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-o|--out-file)
exec >"$2"
shift 2
;;
-e|--err-file)
exec 2>"$2"
shift 2
;;
*)
shift
;;
esac
done
然后ls
命令将写入文件,而不需要自己的重定向。