Существует много ответов, объясняющих это . ~/bin/script.sh
эквивалентно source ~/bin/script.sh
. Вот объяснение почему.
У меня есть несколько кластеров, которые я использую для тестирования, и я использую переменные среды для указания им. Обычно, когда Вы запускаете скрипт, любой набор переменных в нем остаются в пределах того сценария. В примере:
$ echo $MYFIELD #Nothing set
$ cat test.sh
export MYFIELD=foo #This would set it
$ ./test.sh
$ echo $MYFIELD #Didn't work because the script didn't carry it back to its parent
$ . ./test.sh
$ echo $MYFIELD #When run as a sourced script, this stayed in the context of my current shell
foo
Таким образом я могу ввести . ~/env/cluster7
и затем выполненный любые команды, которые я хочу на том кластере, затем вводят . ~/env/cluster3
изменить все мои переменные среды для указания на другой, не имея необходимость вручную устанавливать их.
Заметьте, что"." в начале строки, сопровождаемой пространством, интерпретируется как команда. Это в порядке, потому что Вы никогда не выполняли бы единственный файл, который можно назвать тем путем: текущий каталог. В любом другом контексте, тем не менее, такой как без следующего пространства или в любой точке позже в командной строке, это относится к пути, следовательно . ./test.sh
. Так как это считает командой удар, . test.sh
также работы.
.
Ваше предположение, что это различие связано с тем, что openssl
использует / dev / urandom, а gpg
использует / dev / random
верен.
Вы можете наблюдать за уменьшением доступной энтропии при генерации ключей с помощью gpg
, используя:
watch -n 1 cat /proc/sys/kernel/random/entropy_avail
Я использовал программу для генерации описания шагов для настройки смарт-карты OpenGPG с помощью gpg
, поэтому мне пришлось запускать gpg
несколько раз, пока все не сработало так, как задумано. После первых запусков я заметил, что / dev / random
не будет иметь достаточной энтропии, и gpg просто остановится в ожидании накопления новой энтропии.
Я написал небольшую программу для предоставления дополнительных неслучайных данных, и при этом gpg
не «останавливался», а генерировал ключи почти сразу: это удобно для проверки правильности работы скрипта, но конечно, это не то, что вы должны делать при генерации настоящих ключей.
Программа для ускорения gpg
( не используется в реальных ситуациях ):
# For testing purposes only
# DO NOT USE THIS, tHIS DOES NOT PROVIDE ENTROPY TO /dev/random
import fcntl
import time
import struct
RNDADDENTROPY=0x40085203
while True:
random = "3420348024823049823-984230942049832423l4j2l42j"
t = struct.pack("ii32s", 8, 32, random)
with open("/dev/random", mode='wb') as fp:
# as fp has a method fileno(), you can pass it to ioctl
res = fcntl.ioctl(fp, RNDADDENTROPY, t)
time.sleep(0.001)
Когда я запускаю это во время просмотра entropy_avail
, я вижу доступная энтропия возрастает до более чем 3800.