rpm spec 文件存在“cat”问题

rpm spec 文件存在“cat”问题

我正在编写 spec 文件,希望在其中放置脚本来从 init.d 目录运行进程。以下是 SPEC 文件的一部分:

%prep   

%{__cat} <<EOF  > myapp.run


prog="IMG APP BACKEND"
exec=%{APP_prefix}/bin/myapp.%{_APP}
config=%{APP_prefix}/etc/myapp%{_APP}.xml                                  

. /etc/rc.d/init.d/functions                                                  

start() {
        if [ $UID -ne 0 || $UID -ne 80 ]; then
                echo "User has insufficient privilege."                       
                exit 4                                                        
        fi
        [ -x $exec ] || exit 5
        [ -f $config ] || exit 6
        echo -n $"Starting $prog: "
        daemon $exec $config && success || failure                            
        retval=$?                                                             
        echo
        [ $retval -eq 0 ] && touch $lockfile                                  
        return $retval                                                        
}

当我打开 myapp.run 时我得到(相同部分):

start() {
        if [ 1031 -ne 0 || 1031 -ne 80 ]; then
                echo "User has insufficient privilege." 
                exit 4
        fi
        [ -x  ] || exit 5
        [ -f  ] || exit 6
        echo -n $"Starting : "
        daemon   && success || failure
        retval=0
        echo
        [  -eq 0 ] && touch
        return
}

我做错了什么?为什么变量 UID 是 1031 等等?

谢谢大家的回答

答案1

您正在使用定界符使用<<EOF。在 'sh'/bash shell 中(与大多数其他编程语言一样),heredoc 中的变量在运行时会展开,与双引号字符串中的方式相同。例如,$UID展开为运行 spec 文件的用户 ID,$exec展开为空字符串,因为尚未设置。

$ cat <<EOF
> I am $USER
> EOF
I am grawity

为了避免这种情况,请将限制字符串放在单引号中:<<'EOF'

$ cat <<'EOF'
> I am $USER
> EOF
I am $USER

相关内容