2015-04-06 47 views
0

我想创建简单的.sh脚本,它将包含我的程序的二进制包,并将其复制到目标文件夹。在安装过程中,我想显示gui消息来通知用户一切正常。似乎从这个问题zenity是我需要How to show a GUI message box from a bash script in linux? 但如何提供它与我的单一.sh脚本? (用户应该从任何地方运行安装程序而无需任何其他操作)。对于大多数常见的Linux发行版,是否有通用的特性?也许是“xmessage”,但它看起来很差。还有别的吗?bash上的安装程序:如何显示GUI消息?

+0

为什么要这样做呢?这违反了Linux系统上软件管理系统引入的所有良好实践。为什么不使用包管理而不是创建自己的安装程序?没有一个理智的系统管理员会信任它。除此之外,在任何Linux发行版中使用现有的软件包管理系统都更加舒适和安全。 – arkascha 2015-04-06 13:47:10

+0

包管理在不同的分配方面有所不同,我不知道哪些distrs会使用我的用户,并且创建所有可能的包似乎对我的小程序来说是不合理的。而这个程序不适合系统管理员。此外,对于我的嵌入式专业,我使用通用安装程序(例如Xilinx ISE网络包和Quartus)与专有Linux程序一起工作,并且它在Ubuntu和我的Arch Linux分布式系统上都能很好地工作。 – user3479125 2015-04-06 13:55:10

+1

我从来没有质疑这样的定制安装程序的工作。我说没有一个理智的管理员使用它们,因为没有办法告诉他们对系统做什么。为什么要将一个人的系统的全部管理权交给一个不认识的人,他不知道他的动机?没有那么多的软件包格式,实际上只有2或3个有点广泛。看看opensuse的OpenBuildService。它允许您为许多发行版创建清理包,甚至提供下载存储库。不能变得更舒适... – arkascha 2015-04-06 14:05:21

回答

1

任何类似xmessage或zenity或gxmessage都意味着您不能保证可用的外部依赖关系(除非您可以;您在问题中没有这么说)。要回答你的其中一个问题,Linux没有什么通用的。当然不是任何依赖于X的东西,因为如此多的Linux安装是无头的。

对于“别的东西”,作为一般原则,自给自足是一个好主意。这意味着使用一些甚至不依赖于X Window系统的东西。无论您在FreeBSD还是Linux,基于外壳的对话都可用。为了成为一个真正的自包含的和可移植的(甚至在不同的Linux发行版或不同的服务器配置之间),我建议在你的shell脚本中将自己的对话管理器作为一个函数来编写。一些沿线的:

#!/usr/bin/env bash 

# A supporting function to see test a value against the contents of an array 
is_in() { 
    value=$1; shift 
    for i in "[email protected]"; do [[ $i == $value ]] && return 0; done 
    return 1 
} 

# Simple dialog implementation, no VT100 required, 
dialog() { 
    # $options is an array of options 
    local i line max=0 
    # determine dialog width 
    for line in "${options[@]}"; do [[ ${#line} -gt $max ]] && max=${#line}; done 
    # draw a line 
    eval printf '%.s-' {1..$((max+8))}; echo 
    # print each option 
    for i in ${!options[@]}; do 
    printf "| %2d: %-${max}s |\n" "$i" "${options[i]}" 
    done 
    eval printf '%.s-' {1..$((max+8))}; echo 
    response="" 
    # only accept valid responses 
    while ! is_in "$response" "${!options[@]}"; do 
    read -p " Choose: " response 
    done 
    return "$response" 
} 

# Create our list, run the dialog, capture the result, 
options=([1]="Hello world" [2]="This is a test") 
dialog 
result=$? 

# And display the result. 
echo "RESPONSE: $result/${options[$result]}" 
相关问题