systemd монтируют объем с помощью символьной ссылки устройства

Я с подозрением относился бы к Вашей версии Bash для запуска. Я нахожусь на этой версии, и я могу установить массивы очень хорошо.

$ bash --version
GNU bash, version 4.2.45(1)-release (x86_64-redhat-linux-gnu)

Пример

$ array[0]=0
$ array[1]=1
$ array[2]=2

Можно затем вспомнить их индивидуально:

$ echo ${array[0]}
0

$ echo ${array[1]}
1

$ echo ${array[2]}
2

Или как список:

$ echo "${array[@]}"
0 1 2

Вы не можете только назвать массив как другую переменную:

$ echo $array
0

Я полагаю, что это, возможно, было тем, что вводило в заблуждение Вас в размышление, что это не работало правильно. Также установка элемента массива со значением другой переменной также работает.

Пример

$ newval=3
$ array[2]=$newval

$ echo "${array[@]}"
0 1 3

Вы могли также использовать printf здесь, выполнение так покажет Вам, почему Вы хотите заключить результаты в кавычки ${array[@]}. Но сначала давайте добавим строку к массиву:

$ array[0]="a string"

Без кавычек:

$ printf "%s\n" ${array[@]}
a
string
1
3

С кавычками:

$ printf "%s\n" "${array[@]}"
a string
1
3

Раздавание вещей

Хорошо у Вас есть 2 тактики, которую можно использовать в Bash. Можно просто установить переменные так, чтобы они были глобально ограничены по объему. Это часто - техника, которую использует большинство людей.

Другой метод включает передачу значением, значениями к функциям в Bash. Я покажу основную функцию, куда я передаю ее 2 значения.

Пример

$ function hello() {
 printf "I got arg1: %d and arg2: %d\n" $1 $2
}

Теперь, когда я выполняю его с различными аргументами:

$ hello 1 2
I got arg1: 1 and arg2: 2

$ hello 3 4
I got arg1: 3 and arg2: 4

$ hello 3 blah
bash: printf: blah: invalid number
I got arg1: 3 and arg2: 0

Можно читать больше о массивах и функциях в Bash здесь для получения лучшего понимания технологий.

Ссылки

3
04.08.2014, 20:22
1 ответ

Оказывается, проблема в том, что systemd игнорирует все, что находится внутри /dev/block.

/dev/block/ec2/ephemeral0 была симлинк, созданный правилом udev, поэтому решение проблемы заключается в том, чтобы просто настроить правило udev и поместить симлинк куда-нибудь еще. Я решил поместить его в /dev/disk/ec2/ephemeral0 вместо этого.

$ udevadm info -q symlink -n /dev/xvdb                                                                                                                  
disk/by-uuid/ae145d53-9501-419f-b9b1-7416e5c4fec9 disk/ec2/ephemeral0

$ systemctl list-units -a | grep 'xvdb\|ephemeral0'                                                                                                     
  dev-disk-ec2-ephemeral0.device                                                  loaded    active   plugged   /dev/disk/ec2/ephemeral0
  dev-xvdb.device                                                                 loaded    active   plugged   /dev/xvdb
  sys-devices-vbd\x2d2064-block-xvdb.device                                       loaded    active   plugged   /sys/devices/vbd-2064/block/xvdb

Source: http://lists.freedesktop.org/archives/systemd-devel/2014-August/021919.html

2
27.01.2020, 21:28

Теги

Похожие вопросы