Использование значений переменных, определенных в одном файле, в файлах в том же каталоге

, и я смогу назначить много UUID-ов на один кусок диска.

Не совсем. Вы можете назначить одному объекту только один UUID. Но вы можете иметь объекты, которые покрывают одно и то же пространство и каждый из них имеет свой собственный UUID, например, файловая система и раздел UEFI или логический том LVM, на котором он находится.

Я могу создать несколько устройств подкачки с разными UUID

Это было бы нормально: несколько томов подкачки, каждый из которых имеет свой собственный UUID.

Похоже, что на самом деле вы хотели спросить об обратной ситуации: наличие одного и того же UUID на разных томах. Этого не должно было произойти. Этого не произойдет, если вы используете обычные инструменты. Например, при создании файловой системы или тома подкачки, по умолчанию он получает случайный UUID; так как это случайное значение имеет 122 бита энтропии, мир может иметь около квинтильона (один миллиард) томов, каждый из которых имеет свой собственный UUID, до того, как вероятность столкновений станет значительной.

Если вы сообщите инструментам, которые будут использовать UUID, то вы несете ответственность за то, чтобы UUID был уникальным. UUID уникален, если используется правильно; поэтому, если Вы заставляете использовать не унифицированные UUID, Вы используете их неправильно.

2
15.02.2018, 14:19
2 ответа

Si quiere decir que solo quiere que las variables estén visibles cuando el script principal ejecuta los otros scripts, entonces simplemente exportlas:

$ cat main.sh 
#!/bin/sh
read foo
export foo
./foo.sh
$ cat foo.sh 
#!/bin/sh
echo "foo is $foo"

$./main.sh 
blah
foo is blah
$ 

Los otros scripts se ejecutan como subprocesos del script principal, y exportlas variables ed se les pasan a través del entorno. Nada de esto limita las variables a los scripts en un directorio en particular, las variables exportadas son visibles para todos los programas iniciados por el script principal. Si desea ejecutar algún programa sin pasarles las variables, primero deberá desexportarlos con export -n. También puede cancelar la exportación al comienzo de los otros scripts, para evitar que pasen las variables.

También tenga en cuenta que no es necesario borrar las variables o cancelar su exportación al final del script principal (o de los demás ). Las variables solo existen en la memoria de los procesos de shell en ejecución, y cuando finaliza el proceso, las variables desaparecen.

(Pasar variables a procesos independientes, por otro lado, requeriría guardarlas en un archivo o algo similar.)


Por supuesto, otra forma de lograr casi el mismo tipo de modularización sería dividir el programa en funciones, almacenarlas en archivos separados y sourceesos archivos del script principal. De esa forma, todas las variables del programa serían visibles para todas las funciones. (Que puede o no ser preferible.)

2
27.01.2020, 22:09

Si exporta sus variables, al final de su script maestro, "desactive" las variables.

unset domain
unset dbrootp_1
unset dbrootp_2
unset dbuserp_1
unset dbuserp_2

desarmado :desarmado [ -f] [ -v] [nombre...] Para cada NOMBRE, elimine la variable o función correspondiente. Dado la bandera-v', unset will only act on variables. Given the-f', unset solo actuará sobre las funciones. Sin ninguna bandera, desarma primero intenta desarmar una variable, y si eso falla, entonces intenta desarmar una función. Algunas variables no se pueden desarmar; también vea solo lectura.

0
27.01.2020, 22:09

Теги

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