4

Можно ли получить ввод от пользователя во время установки rpm?
У меня есть скрипт, который работает сам по себе (принимает данные от пользователя и выполняет действия), но когда он запускается как часть после установки rpm (т.е. добавляется в раздел %post спецификации rpm), он не работает.

Это должно быть возможно? Это часть:

%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.
Зачем? Что я здесь не так делаю?

4 ответа4

3

Нет, у вас не может быть интерактивных сценариев постинсталляции в RPM. Это намеренно.

Много раз RPM устанавливаются в автоматической системе. Если установка зависнет до тех пор, пока кто-нибудь не придет, она может застревать там целую вечность.

3

Это очень плохая идея, но это возможно.

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.
0

Технически это возможно, по крайней мере , для некоторых команд. В одном из моих RPM-файлов у меня есть команда mount в сценариях после установки, которая монтирует защищенный паролем общий ресурс Windows:

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

и я получаю следующий вывод во время установки RPM:

Password:

Затем пользователь должен ввести пароль, прежде чем продолжить установку.

0

В ответе @Charles Duffy мы можем сделать это с помощью функции /dev/tty в Linux. Также мы можем использовать чтение для чтения строки из стандартного ввода.

Ниже приведен пример для интерактивных оборотов -

Если вы хотите принять пользовательский ввод, как [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

Некоторые пользователи могут захотеть создать репозиторий yum из этого интерактивного rpm.

Ниже приведен пример для интерактивного rpm с yum -

Если вы хотите принять пользовательский ввод, как [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, т.е. напечатайте это сообщение на другом терминале, на котором пользователь будет вводить данные.

Надеюсь, поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .