为什么我会收到" [...] 2>的语法错误>(tee -a $ logfile>& 2)[...]"在作为rpm预安装scriptlet运行时的脚本中,但是当脚本从命令行运行时不是吗?
该构造的目的是将stderr直接转发到日志文件,但要将stderr转发给日志文件和控制台。
这里是完整的示例脚本:
#!/bin/bash
LOGFILE=/tmp/example.log;
if mkdir -v /tmp/example 1>>$LOGFILE 2> >(tee -a $LOGFILE >&2);
then
echo "ok";
else
echo "ko";
exit 1;
fi
当作为rpm的前脚本运行(使用maven rpm插件构建)时,我收到错误消息:
syntax error near unexpected token `>'
` mkdir -v /tmp/example 1>>$LOGFILE 2> >(tee -a $LOGFILE >&2);'
如果我从命令行调用相同的脚本,我会按预期得到" ok&#34 ;.
我需要做些什么才能让它在rpm内工作?
感谢您提供有用的答案。
答案 0 :(得分:2)
这与rpm无关。如果您将其放在文件脚本中并尝试从命令行运行它,您将得到相同的错误。 这是因为脚本执行bash与posix兼容。 见https://stackoverflow.com/a/12122609/3489429
unset POSIXLY_CORRECT
会起作用,但你应该避免进程扩展并使用例如管道
答案 1 :(得分:0)
感谢一位同事,同时解决了这个问题(在msuchy的回答之前),如下:
[...]
mkdir -v /tmp/example 1>>$LOGFILE 2>&1|tee -a >&2;
RETURNCODE=${PIPESTATUS[0]};
if [ $RETURNCODE = 0 ];
then
[...]