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 с тех пор, как я начал использовать его. У каждой новой новой версии есть новый способ сделать это. Раздражает.