2015-04-06 36 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]}" 
相關問題