在 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 语句中的中止。
为什么?我在这里做错了什么?
答案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:
然后用户必须输入密码才能继续安装。