Setenv переменная с пробелами в launchd.conf?
Я пользователь Linux, который недавно получил mac. Я пытаюсь настроить свою среду IDE и выяснил, что Mac не используют .bashrc/.bash_profile/и т.д. Для приложений с графическим интерфейсом. Итак, если у вас есть приложение GUI, для которого требуется переменная среды, вы, по-видимому, должны это делать в /etc/launchd.conf
Дело в том, что этот файл использует синтаксис setenv типа csh ( "значение ключа setenv" вместо "export key = 'value" ), так что теперь, когда у меня есть переменная, в которой есть пробел, я не знаю что делать. Ничего не работает. Вот что я пытался проверить:
setenv MAVEN_OPTS "-Xms512m -Xmx1024m"
setenv MAVEN_OPTS1 '-Xms512m -Xmx1024m'
setenv MAVEN_OPTS2 (-Xms512m -Xmx1024m)
setenv MAVEN_OPTS3=(-Xms512m -Xmx1024m)
setenv MAVEN_OPTS4 -Xms512m -Xmx1024m
setenv MAVEN_OPTS5 -Xms512m
setenv MAVEN_OPTS6 "$MAVEN_OPTS5 -Xmx1024"
setenv MAVEN_OPTS7 $MAVEN_OPTS5 -Xmx1024
setenv MAVEN_OPTS8 /just/checking
setenv MAVEN_OPTS9="-Xms512m -Xmx1024m"
setenv MAVEN_OPTS10='-Xms512m -Xmx1024m'
setenv MAVEN_OPTS11='-Xms512m\ -Xmx1024m'
setenv MAVEN_OPTS12 '-Xms512m\ -Xmx1024m'
setenv MAVEN_OPTS13 "-Xms512m\ -Xmx1024m"
setenv MAVEN_OPTS14 -Xms512m\ -Xmx1024m
После перезагрузки остаются только переменные # 5 и # 8. (Те, у которых нет пробелов.) Ни один из остальных не находится в моей среде.
Ответы
Ответ 1
Попробуйте использовать launchd вместо (создайте plist/Library/LaunchDaemons/java.props.plist):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>java.props</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>setenv</string>
<string>JAVA_OPTS</string>
<string>-Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>LaunchOnlyOnce</key>
<true/>
</dict>
</plist>
Это будет работать один раз и настроить вашу среду. Надеюсь, это поможет.
Ответ 2
Это не работает как в c-shell, потому что /etc/launchd.conf - это не что иное, как последовательность специальных команд для launchctl. См. Справочную страницу launchctl для ссылки на то, что работает в /etc/launchd.conf
К сожалению, это все равно не поможет вам решить эту проблему, но я надеюсь, что это немного разъяснит контекст. Для меня эта проблема является недостатком в инструментах Apple launchct/startd. Мне тяжело работать вокруг себя.
Ответ 3
В 10.8.2 следующая команда отлично работает:
$ launchctl setenv MY_VARIABLE My\ value\ with\ spaces
Подтвердить с помощью:
$ launchctl getenv MY_VARIABLE
My value with spaces
Ответ 4
Добавьте следующую строку в /etc/launchd.conf
(создайте, если она не существует)
setenv MY_VARIABLE My\ value\ with\ spaces
Обратите внимание, что после перезагрузки это будет иметь эффект.
Чтобы использовать новое значение без перезагрузки, дополнительно запустите команду в терминале
launchctl setenv MY_VARIABLE My\ value\ with\ spaces
как предположил патрика.
Обратите внимание, что это будет иметь эффект только для приложений, запущенных после запуска команды. Манипулирование /etc/launchd.conf
по-прежнему необходимо для сохранения изменений после перезагрузки.
Ответ 5
В 10.13.2 это работает для меня:
launchctl setenv MY_VARIABLE 'Мое значение с пробелами'
Но, кстати, я использую Script Editor для создания приложения (~/StartupEnvVars.app), содержащего такие строки:
do shell Script "launchctl setenv MY_VARIABLE" Мое значение с пробелами "
Затем в настройках | Users | Login Items я добавляю это приложение в качестве элемента запуска.
Он работает с этим предостережением: если у меня есть приложение Terminal и мое R, когда я выхожу из системы, и вы можете снова открыть окна при входе в систему, после того, как эти приложения загрузятся автоматически, когда я вхожу в систему, они НЕ видят среду переменные, заданные StartupEnvVars.app. Но, если я закрываю эти приложения и снова их открываю, они видят переменные среды.
Если бы это был только терминал, я бы использовал .bash_profile, но я хочу также установить env vars для использования в R. Я думаю, что было около 5 способов установить глобальные env vars в OSX с тех пор, как я начал использовать его. У каждой новой новой версии есть новый способ сделать это. Раздражает.