переменная setenv с пробелами в launchd.conf?

Я пользователь Linux, у которого недавно появился Mac. Я пытаюсь настроить свою IDE и обнаружил, что Mac не используют .bashrc/.bash_profile/и т. д. для приложений с графическим интерфейсом. Итак, если у вас есть приложение с графическим интерфейсом, которому нужна переменная среды, вы, по-видимому, должны сделать это в /etc/launchd.conf.

Дело в том, что этот файл использует синтаксис setenv в стиле csh («значение ключа setenv» вместо «экспорт ключа = 'значение'»), поэтому теперь, когда у меня есть переменная, в которой есть пробел, я не знаю, что делать . Ничего не работает. Вот что я пытался проверить:

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

После перезагрузки выживают только var #5 и #8. (Те, что без пробелов.) Остальные не входят в мою среду.


person inanutshellus    schedule 25.03.2010    source источник
comment
ты разобрался как заставить его работать? У меня такая же проблема. Я также заметил, что concat Vars не работает. Я не могу указать: setenv MV 1 setenv MV12 $MV/2   -  person mickthompson    schedule 30.05.2010
comment
Нет простите. Будем надеяться, что какая-то добрая, хорошо информированная душа однажды заглянет и сообщит нам решение. ;)   -  person inanutshellus    schedule 16.06.2010
comment
У меня точно такая же проблема. эти проблемы env vars, каждый раз одна и та же проблема: S   -  person Michael Trouw    schedule 04.11.2012
comment
Вы пробовали предложение Сержа? Это сработало для вас?   -  person inanutshellus    schedule 05.11.2012


Ответы (5)


Попробуйте вместо этого использовать 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>

Это запустится один раз и настроит вашу среду. Надеюсь, это поможет.

person Serge ETL    schedule 13.07.2012
comment
Бесконечно благодарен! Я искал решение для этого весь день. Это единственное, что работает глобально. - person Stefan Anca; 09.01.2013
comment
Как насчет более чем одной переменной среды? - person Distortum; 09.02.2013

Добавьте следующую строку в /etc/launchd.conf (создайте, если она не существует)

setenv MY_VARIABLE My\ value\ with\ spaces

Обратите внимание, что это будет иметь эффект только после перезагрузки.

Чтобы использовать новое значение без перезагрузки, дополнительно запустите команду в терминале

launchctl setenv MY_VARIABLE My\ value\ with\ spaces
как подсказала патриха.

Обратите внимание, что это повлияет только на приложения, запущенные после выполнения команды. Манипулирование /etc/launchd.conf по-прежнему необходимо, чтобы сохранить изменения после перезагрузки.

person Random Citizen    schedule 30.09.2013

Он не работает как в c-shell, потому что /etc/launchd.conf — это не что иное, как последовательность специальных команд для launchctl. См. man-страницу launchctl для справки о том, что работает в /etc/launchd.conf.

К сожалению, это все еще не поможет вам решить эту проблему, но я надеюсь, что это немного прояснит контекст. Для меня эта проблема является недостатком инструментов Apple launchctl/launchd. Я сам с трудом справляюсь с этим.

person Uli    schedule 31.08.2010

На 10.8.2 отлично работает следующая команда:

$ launchctl setenv MY_VARIABLE My\ value\ with\ spaces

Подтвердить с помощью:

$ launchctl getenv MY_VARIABLE
My value with spaces
person patrikha    schedule 30.12.2012
comment
launchctl в Терминале и launchd.conf совершенно не связаны. bash разбирает обратную косую черту, launchd.conf нет. - person hamstergene; 24.10.2013

В 10.13.2 у меня это работает:

launchctl setenv MY_VARIABLE 'Мое значение с пробелами'

Но если быть точным, я использую редактор сценариев для создания приложения (~/StartupEnvVars.app), содержащего такие строки:

сделать сценарий оболочки "launchctl setenv MY_VARIABLE 'Мое значение с пробелами'"

Затем в «Настройки|Пользователи|Элементы входа» я добавляю это приложение в качестве элемента автозагрузки.

Это работает, но с одной оговоркой: если у меня есть терминал и мое приложение R, когда я выхожу из системы, и я выбираю повторно открывать окна при входе в систему, после того, как эти приложения автоматически загружаются при входе в систему, они НЕ видят переменные среды, установленные StartupEnvVars.app. Но если я закрою эти приложения и снова открою их, они увидят переменные среды.

Если бы это был только терминал, я бы использовал .bash_profile, но я хочу также установить переменные env для использования в R. Я думаю, что было около 5 способов установить глобальные переменные окружения в OSX с тех пор, как я начал его использовать. Каждая основная новая версия имеет новый способ сделать это. Раздражающий.

person tedtoal    schedule 19.01.2018