Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Никакой процесс не может изменить свой родительский процесс (или среда никакого другого существующего процесса).
можно, однако, создать новую среду путем создания новой интерактивной оболочки с измененной средой.
необходимо породить новую копию оболочки, которая использует обновленную среду и имеет доступ к существующему stdin, stdout и stderr, и делает его танец реинициализации.
необходимо сделать что-то как подпроцесс использования. Popen для выполнения /bin/bash -i
.
, Таким образом, исходная оболочка запускает Python, который выполняет новую оболочку. Да, у Вас есть большое выполнение процессов. Нет это не слишком плохо, потому что исходная оболочка и Python действительно не делают ничего кроме ожидания подоболочки для окончания так, они могут выйти чисто, также.
Не возможно, ни для какого дочернего процесса, изменить среду родительского процесса. Лучшее, которое можно сделать, должно произвести операторы оболочки к stdout, что Вы затем источник, или пишут это в файл, который Вы получаете в родителе.
Я использовал бы оператор оценки удара и имел бы сценарий Python, производит код оболочки
child.py:
#!/usr/bin/env python
print 'FOO="A_Value"'
parent.sh
#!/bin/bash
eval `./child.py`