在 rpm 安装期间可以获得用户的输入吗?

在 rpm 安装期间可以获得用户的输入吗?

在 rpm 安装期间是否可以获取用户的输入?
我有一个可以自行运行的脚本(获取用户的输入并执行操作),但当作为 rpm 安装后的一部分运行时(即添加到%postrpm 规范的部分),它不起作用。

这可能吗?这是部分:

%post

import()  
{  
echo "Do you want to import file?"   
select INPUT in "Y" "N"; do  
        case $INPUT in  
                Y ) echo "You selected to import file";break;;  
                N ) echo "Exiting";exit 0;break;;  
        esac  
done   

read -p "Please file path: " FILE  
if [ -d "$FILE" ]; then  
      cp $FILE/myFile /opt/tmp/   
      echo "Done!"  
else  
   echo "No File Path."  
   done=0  
   while [ $done = 0 ]  
   do   
        echo  "Do you want to abort"  
        select INPUT in "Y" "N";  
        do  
                case $INPUT in  
                        Y )   
                                echo "Aborting"   
                                done=1  
                                break  
                                        ;;  
                        N )  
                                 echo "You selected to import"  
                                # break  
                                 #;;  
                                 read -p "Please provide the directory : " FILE  
                                 if [ -d "$FILE" ]; then  
                                        cp $FILE/myFile /opt/tmp  
                                        echo "Done"   
                                        done=1  
                                else  
                                        echo "Aborting."  
                                fi  
                                break  
                                ;;  
                esac  
           done  
   done  

fi
}    

import
exit 0  

在安装过程中,它直接跳转到第二个 case 语句中的中止。
为什么?我在这里做错了什么?

答案1

不,您不能在 RPM 中包含交互式安装后脚本。这是故意的。

很多时候,RPM 都是在无人值守的系统上安装的。如果安装过程一直挂起直到有人来,那么它可能会在那里停留很长时间。

答案2

这是一个非常糟糕的想法,但是却是可能的。

if ! exec </dev/tty; then
  : "deal with the case where you simply can't read from the user here"
  exit
fi

# ...the read command will work here.

答案3

正如@Charles Duffy 发布的答案所示,我们可以这样做/dev/ttyLinux 的功能。我们还可以使用从标准输入读取一行。

下面的例子是交互式转速-

如果你想接受用户输入,如 [Y/n] -

echo "Do you want to install <some package> [Y/n] "
if exec </dev/tty; then
    read input;
fi

# use input here or below

一些 cent os 用户可能希望从这个交互式 rpm 创建 yum repo。

下面的例子是使用 yum 进行交互式 rpm-

如果你想接受用户输入,如 [Y/n] -

echo "Do you want to install <some package> [Y/n] " >/dev/tty
if exec </dev/tty; then
    read input;
fi

# use input here or below

确保以上脚本中的 echo 以 >/dev/tty 结尾,即在用户将输入的不同终端上打印此消息。

希望能帮助到你。

答案4

从技术上来说,至少对于某些命令而言是可能的。在我的某个 RPM 中,我mount在安装后脚本中有一个命令,用于挂载受密码保护的 Windows 共享:

mount -t cifs //1.2.3.4/share /var/www/html -o username=user

我在 RPM 安装期间获得以下输出:

Password:

然后用户必须输入密码才能继续安装。

相关内容