Заключение в кавычки Википедии:
Схема URI файла является схемой URI, указанной в RFC 1630 и RFC 1738, обычно используемом для получения файлов из собственного компьютера.
и RFC 1738:
Схема URL файла используется для обозначения файлов доступными на конкретном главном компьютере. Эта схема, в отличие от большинства других схем URL, не определяет ресурс, который универсально доступен по Интернету.
URL файла принимает форму:
file://host/path
где хост является полностью определенным доменным именем системы на который
path
доступно, иpath
иерархический путь к каталогу формыdirectory>/directory/.../name
.Как особый случай,
host
может быть строкаlocalhost
или пустая строка; это интерпретируется как 'машина, от которой интерпретируется URL'.
Большая часть поддержки браузеров file://
URI, co можно открыть файл от диска при помощи их на адресной строке браузера.
Я не думаю это application://
URI является standarized - нет никакой информации об этом на Википедию и в RFC на сайте IETF и в сайте IANA, таким образом, использование этой схемы URI довольно специализировано и разработано для приложения внутренние потребности.
Нет, к сожалению, никакого полностью портативного местоположения для установки переменных среды. Два файла, которые прибывают самые близкие, ~/.profile
, который является традиционным местоположением и работами из поля на многих установках, и ~/.pam_environment
, современная, распространенная, но ограниченная альтернатива.
~/.pam_environment
Файл ~/.pam_environment
читается всеми методами входа в систему, которые используют PAM и которым включили этот файл. Это покрывает большинство систем Linux в наше время.
Главное преимущество ~/.pam_environment
это (при включении) это читается, прежде чем оболочка пользователя запускается, таким образом, это работает независимо от типа сессии, оболочки входа в систему и других сложностей. Это даже работает на неинтерактивные логины такой как su -c somecommand
и ssh somecommand
.
Основное ограничение ~/.pam_environment
это, можно только поместить простые присвоения там, не сложный синтаксис оболочки. Синтаксис этого файла следующие.
export
и одиночный пробел (не вкладка, пойди разберись).VAR=VALUE
где VAR состоит из букв, цифр и символов нижнего подчеркивания.#
запускает комментарий, это не может появиться в значении.'
или "
и содержит другую идентичную кавычку, затем VAR установлен на строку между кавычками (все после того, как вторая кавычка проигнорирована). Иначе VAR установлен на строку после =
знак.=
, переменная удалена из среды.Таким образом на позитивном аспекте, ~/.pam_environment
работы в большом массиве обстоятельств. На оборотной стороне Вы не можете иметь никаких динамических настроек, таких как основа значение переменной на другой переменной (например, добавление каталога для СОЕДИНЕНИЯ КАНАЛОМ) или использовать вывод команды (например, протестировать, если каталог или программа присутствуют), и некоторые символы (#'"
, новая строка), невозможны или неприятны, чтобы вставить значение.
~/.profile
Этот файл должен иметь портативный (POSIX) sh синтаксис. Только используйте ksh или колотите расширения (массивы, [[ … ]]
, и т.д.), если Вы знаете, что Ваша система имеет эти оболочки как /bin/sh
.
Этот файл может быть считан сценариями в автоматизированных приложениях, таким образом, он не должен называть программы, которые производят любой вывод или вызов exec
. Если Вы хотите сделать это на логинах текстового режима, сделайте это только для интерактивных оболочек. Пример:
case $- in *i*)
# Display a message if I have new mail
if mail -e; then echo 'You have new mail'; fi
# If zsh is available, and this looks like a text-mode login, run zsh
case "`ps $PPID` " in
*" login "*)
if type zsh >/dev/null 2>/dev/null; then exec zsh; fi;;
esac
esac
Это - пример использования /bin/sh
как Ваша оболочка входа в систему и переключающийся на Вашу любимую оболочку. См. также, как я могу использовать удар в качестве своей оболочки входа в систему, когда мой системный администратор отказывается позволять мне изменить его
~/.profile
не чтение на неграфическом входе в систему?Различные оболочки входа в систему читают различные файлы.
Чтения Bash ~/.bash_login
или ~/.bash_profile
если они существуют вместо ~/.profile
. Также удар не читает ~/.bashrc
в оболочке входа в систему, даже если это является интерактивным. Для никогда не запоминания этих причуд снова создайте a ~/.bash_profile
со следующими двумя строками:
. ~/.profile
case $- in *i*) . ~/.bashrc;; esac
См. также, Какие файлы настройки должны использоваться для установки переменных среды с ударом?
Чтения Zsh ~/.zprofile
и ~/.zlogin
, но нет ~/.profile
. Zsh имеет другой синтаксис от sh, но может читать ~/.profile
в sh режиме эмуляции. Можно использовать это для Вашего ~/.zprofile
:
emulate sh -c '. ~/.profile'
См. также Zsh, не совершающий нападки ~/.profile
Нет очень, можно сделать там, за исключением использования /bin/sh
как Ваша оболочка входа в систему и Ваша любимая оболочка (такая как рыба) как интерактивная оболочка только. Это - то, что я делаю с zsh. Посмотрите выше для примера вызова другой оболочки от ~/.profile
.
При вызове удаленной команды, не проходя интерактивную оболочку, не все оболочки читают файл запуска.
Ksh читает файл, указанный ENV
переменная, если Вам удается передать его.
Чтения Bash ~/.bashrc
если это не является интерактивным (!), и его родительский процесс называют rshd
или sshd
. Таким образом, можно запустить Ваш ~/.bashrc
с
if [[ $- != *i* ]]; then
. ~/.profile
return
fi
Zsh всегда читает ~/.zshenv
когда это запускается. Используйте с осторожностью, так как это читается каждым экземпляром zsh, даже когда это - подоболочка, где Вы установили другие переменные. Если zsh является Вашей оболочкой входа в систему, и Вы хотите использовать его, чтобы установить переменные только для удаленных команд, использовать защиту: установите некоторую переменную в ~/.profile
, такой как MY_ENVIRONMENT_HAS_BEEN_SET=yes
, и проверьте эту защиту перед чтением ~/.profile
.
if [[ -z $MY_ENVIRONMENT_HAS_BEEN_SET ]]; then emulate sh -c '~/.profile'; fi
Многие дистрибутивы, менеджеры по оформлению и настольные среды располагают работать ~/.profile
, или путем явного определения источника его из сценариев запуска или путем выполнения оболочки входа в систему.
К сожалению, нет никакого общего метода обработать distro/DM/DE комбинации где ~/.profile
не читается.
Если Вы используете традиционную сессию, запущенную ~/.xsession
, это - место, где необходимо установить переменные среды; сделайте это путем определения источника ~/.profile
(т.е. . ~/.profile
). Обратите внимание, что в некоторых установках, сценарии запуска настольной среды получат ~/.profile
снова.
Насколько я знаю, там не существует никакой дистрибутив и стандарт агностика оболочки, как установить переменные среды.
Наиболее распространенный и фактический стандарт, кажется, /etc/profile
и ~/.profile
. Второе наиболее распространенное, кажется, /etc/environment
и ~/.pam_environment
.
Мне кажется, что вся документация, что я нашел Вас также уже, показала. Я перечисляю их здесь так или иначе для других читателей.
/etc/profile
и ~/.profile
(ссылка)./etc/environment
и ~/.pam_environment
(ссылка)./etc/profile
и /etc/environment
(ссылка).Премия: текст, подвергающий сомнению использование и/или неправильное употребление /etc/environment
в debian (ссылка, последнее обновление 2008).
sh
? Пока Вы придерживаетесь POSIX, я думал бы, что Вы будете в порядке...
– evilsoup
26.08.2013, 18:56
csh
и друзья POSIX путь (Вам нужно что-то как set
или setenv
)
– Joseph R.
26.08.2013, 20:22
Я добавил следующий скрипт ~/bin/agnostic _setenv:
#!/bin/csh -f
set args = ($*)
if ($#args == 1) then
echo "export $args[1]="
exit 0
endif
if ($#args == 2) then
if ("$args[1]" =~ *csh*) then
echo "setenv $args[2]"
exit 0
else
echo "export $args[1]=$args[2]"
exit 0
endif
endif
echo "setenv $args[2] $args[3]"
И в ~/.perl -homedir я использую:
eval `${HOME}/bin/agnostic_setenv $shell PERL_HOMEDIR 0`
Аналогичный скрипт для агностиков _unsetenv:
#!/bin/csh -f
set args = ($*)
if ($#args == 1) then
echo "export $args[1]"
exit 0
endif
echo "unsetenv $args[2]"
exit 0
Если вы используете systemd -homed , вы должны иметь возможность использоватьhomectl
для установки переменных среды для вашей учетной записи пользователя независимо от вашей оболочки. Следующая команда устанавливает переменную среды EDITOR
таким образом.
homectl update username --setenv=EDITOR=/usr/bin/vim
case $- in *i*)
? – qodeninja 05.02.2014, 02:04;;
илиesac
) если$-
соответствует шаблону*i*
, т.е. если$-
содержитi
, т.е. если оболочка является интерактивной. Достаточно ярмарка – Gilles 'SO- stop being evil' 05.02.2014, 02:06$-
строка установленных в настоящее время опций оболочки. (какset -x
).i
означает интерактивную оболочку. – Peter Cordes 19.04.2015, 18:12~/.config/env
, даже без эмуляции? большое спасибо – Kevin Suttle 29.12.2015, 23:34.profile
совместимый с довольно старыми Оболочками Bourne, но я распознаю, что некоторые люди просто не заботятся. У меня ничего нет против людей, предполагающих, что sh = колотят за свои собственные файлы, я только забочусь, публикуют ли они#!/bin/sh
сценарий, которые используют функции удара. – Gilles 'SO- stop being evil' 03.08.2017, 19:53