사용자가 MIRROR 환경 변수의 값을 선택할 수 있도록 bash 스크립트를 작성하는 방법은 무엇입니까?

사용자가 MIRROR 환경 변수의 값을 선택할 수 있도록 bash 스크립트를 작성하는 방법은 무엇입니까?

저는 현재 호출 시 사용자에게 Sabayon의 미러 목록에서 선택하도록 요청하는 Bash 함수를 작성 중입니다. 하지만 각 옵션에 국가 및 연결 속도와 같은 미러에 대한 정보가 포함되기를 바랍니다. 현재 다음 Bash 기능이 있습니다.

function sabayon-mirror {
  L=('ftp://mirrors.coopvgg.com.ar/sabayon/ 
  ftp://gd.tuwien.ac.at/linux/sabayonlinux/
  ftp://mirror.optusnet.com.au/sabayon')
  select x in "${L[@]}"
  do
    export MIRROR="$x"
  done
}

각 URL 뒤에 미러 정보를 추가하면 해당 정보가 선택할 수 있는 또 다른 옵션으로 간주됩니다.

편집: Chaos의 답변은 제가 원래 원했던 것이었지만 각 미러를 수동으로 나열할 필요가 없지만 대신 원격 목록에서 가져올 수 있는 답변이 있는 경우에도 듣고 싶습니다.

답변1

어떻게에 대한:

function sabayon-mirror {
  L=('Info about mirror 1 - ftp://mirrors.coopvgg.com.ar/sabayon/' 
  'Info about mirror 2 - ftp://gd.tuwien.ac.at/linux/sabayonlinux/'
  'Info about mirror 3 - ftp://mirror.optusnet.com.au/sabayon')
  select x in "${L[@]}"
  do
    export MIRROR="${x#*-}"
  done
}

정보는 프로젝트의 일부입니다. 그러나 변수 값을 내보내면 삭제됩니다.

답변2

스크립트에서 단일 항목으로 배열을 정의하고 있습니다. 모든 요소를 ​​작은따옴표로 묶으므로 하나의 긴 문자열로 처리됩니다. Bash의 배열 요소는 공백으로 구분되므로 각 요소를 개별적으로 인용해야 합니다.

L=('ftp://mirrors.coopvgg.com.ar/sabayon/' 
  'ftp://gd.tuwien.ac.at/linux/sabayonlinux/'
  'ftp://mirror.optusnet.com.au/sabayon')

즉, bash를 사용하고 있으므로 연관 배열을 사용할 수 있습니다.

function sabayon-mirror {
  declare -A L=(
    [Info about mirror 1]="ftp://mirrors.coopvgg.com.ar/sabayon/"
    [Info about mirror 2]="ftp://gd.tuwien.ac.at/linux/sabayonlinux/"
    [Info about mirror 3]="ftp://mirror.optusnet.com.au/sabayon")
  select x in "${!L[@]}"
  do
    export MIRROR="${L[$x]}"
  done
}

이를 염두에 두고 다음에서 Sabyon 거울 목록을 얻었습니다.여기그리고 당신을 위해 다음 함수를 작성했습니다:

## Declare the associative array
declare -A L=(
[Argentina 1]="ftp://mirrors.coopvgg.com.ar/sabayon/entropy"              [Argentina 2]="http://mirrors.coopvgg.com.ar/sabayon/entropy"
[Austria 1]="ftp://gd.tuwien.ac.at/linux/sabayonlinux/entropy"            [Austria 2]="http://gd.tuwien.ac.at/linux/sabayonlinux/entropy"
[Australia 1]="ftp://mirror.internode.on.net/pub/sabayon/entropy"         [Australia 2]="http://mirror.internode.on.net/pub/sabayon/entropy"
[Australia 3]="ftp://mirror.optusnet.com.au/sabayon/entropy"              [Australia 4]="http://mirror.optusnet.com.au/sabayon/entropy"
[Belgium 1]="ftp://ftp.belnet.be/mirror/sabayonlinux/entropy"             [Belgium 2]="http://ftp.belnet.be/mirror/sabayonlinux/entropy"
[Brazil 1]="ftp://sabayon.c3sl.ufpr.br/sabayon/entropy"                   [Brazil 2]="http://sabayon.c3sl.ufpr.br/entropy"
[Czech Republic 1]="ftp://mirror.dkm.cz/pub/sabayon/entropy"              [Czech Republic 2]="http://sabayon.mirror.dkm.cz/pub/sabayon/entropy"
[Germany 1]="http://mirror.de.sabayon.org/entropy"                        [Denmark 1]="ftp://ftp.klid.dk/sabayonlinux/enttropy"
[Denmark 2]="http://ftp.klid.dk/sabayonlinux/entropy"                     [Greece 1]="ftp://ftp.cc.uoc.gr/mirrors/linux/SabayonLinux/entropy"
[Greece 2]="http://ftp.cc.uoc.gr/mirrors/linux/SabayonLinux/entropy"      [Hungary 1]="ftp://ftp.fsn.hu/pub/linux/distributions/sabayon/entropy"
[Hungary 2]="http://ftp.fsn.hu/pub/linux/distributions/sabayon/entropy"   [Italy 1]="http://mirror.it.sabayon.org/entropy"
[Italy 2]="ftp://na.mirror.garr.it/mirrors/sabayonlinux/entropy"          [Italy 3]="http://na.mirror.garr.it/mirrors/sabayonlinux/entropy"
[Japan 1]="ftp://ftp.riken.jp/Linux/sabayon/entropy"                      [Japan 2]="http://ftp.riken.jp/Linux/sabayon/entropy"
[Japan 3]="ftp://ftp.kddilabs.jp/Linux/packages/sabayonlinux/entropy"     [Japan 4]="http://ftp.kddilabs.jp/Linux/packages/sabayonlinux/entropy"
[Japan 5]="http://ftp.tsukuba.wide.ad.jp/Linux/sabayon/entropy"           [Netherlands 1]="ftp://ftp.nluug.nl/pub/os/Linux/distr/sabayonlinux/entropy"
[Netherlands 2]="http://ftp.nluug.nl/os/Linux/distr/sabayonlinux/entropy" [Netherlands 3]="ftp://ftp.surfnet.nl/pub/os/Linux/distr/sabayonlinux/entropy"
[Portugal 1]="ftp://glua.ua.pt/sabayon/entropy"                           [Portugal 2]="ftp://ftp.rnl.ist.utl.pt/pub/sabayon/entropy"
[Portugal 3]="http://ftp.rnl.ist.utl.pt/pub/sabayon/entropy"              [Russian Federation 1]="ftp://mirror.yandex.ru/sabayon/entropy"
[Russian Federation 2]="http://mirror.yandex.ru/sabayon/entropy"          [Sweden 1]="ftp://ftp.portlane.com/pub/os/linux/sabayon/entropy"
[Sweden 2]="http://ftp.portlane.com/pub/os/linux/sabayon/entropy"         [United States 1]="ftp://mirrors-usa.go-parts.com/sabayon/entropy"
[United States 2]="http://mirrors-usa.go-parts.com/sabayon/entropy"       [United States 3]="ftp://mirror.cs.vt.edu/pub/SabayonLinux/entropy"
[United States 4]="http://mirror.cs.vt.edu/pub/SabayonLinux/entropy"      [United States 5]="http://cross-lfs.sabayonlinux.org/entropy"
[United States 6]="http://mirror.clarkson.edu/sabayon/entropy"            [United States 7]="http://mirror.umd.edu/sabayonlinux/entropy"
[South Africa 1]="ftp://sabayon.mirror.ac.za/entropy"                     [South Africa 2]="http://sabayon.mirror.ac.za/entropy"
)
## Unfortunately, associative arrays are not stored in the
## order you create them with so, to have the select show
## sorted options, we need a second, helper array.
sorted=(
[1]="Argentina 1"             [2]="Argentina 2"             [3]="Australia 1"
[4]="Australia 2"             [5]="Australia 3"             [6]="Australia 4"
[7]="Austria 1"               [8]="Austria 2"               [9]="Belgium 1"
[10]="Belgium 2"              [11]="Brazil 1"               [12]="Brazil 2"
[13]="Czech Republic 1"       [14]="Czech Republic 2"       [15]="Denmark 1"
[16]="Denmark 2"              [17]="Germany 1"              [18]="Greece 1"
[19]="Greece 2"               [20]="Hungary 1"              [21]="Hungary 2"
[22]="Italy 1"                [23]="Italy 2"                [24]="Italy 3"
[25]="Japan 1"                [26]="Japan 2"                [27]="Japan 3"
[28]="Japan 4"                [29]="Japan 5"                [30]="Netherlands 1"
[31]="Netherlands 2"          [32]="Netherlands 3"          [33]="Portugal 1"
[34]="Portugal 2"             [35]="Portugal 3"             [36]="Russian Federation 1"
[37]="Russian Federation 2"   [38]="South Africa 1"         [39]="South Africa 2"
[40]="Sweden 1"               [41]="Sweden 2"               [42]="United States 1"
[43]="United States 2"        [44]="United States 3"        [45]="United States 4"
[46]="United States 5"        [47]="United States 6"        [48]="United States 7"
)
select x in "${sorted[@]}"
do
    export MIRROR="${L[$x]}"
    break
done

이를 수행하는 더 좋은 방법이 있어야 합니다. 사용 가능한 이미지가 Sabayon 시스템 어딘가에 저장되어 있을 것이라고 확신하지만 저는 Sabayon을 사용하지 않으므로 잘 모르겠습니다. 위에 링크한 페이지에 따르면 /etc/entropy/repositories.conf.d해당 디렉토리의 형식을 사용하여 질문을 편집하면 즉시 미러 목록을 생성하는 데 도움을 줄 수 있습니다.

관련 정보