Программы по умолчанию
Модератор: Модераторы разделов
Программы по умолчанию
Вопрос: в Slackware есть такое понятие как программы по умолчанию?
Например если установлены текстовые редакторы vim, elvis и emacs то какой будет запускаться командой editor?
Это умолчание можно установить вручную через "ln -s /usr/bin/vim /usr/bin/editor" или лучше не лазить руками в /usr и поступить другим способом?
Вот в man visudo, например, сказано что sudoers открывается редактором указаным в переменных VISUAL или EDITOR. У меня установлена переменная EDITOR=vim, но sudoers открывается в elvis.
Например если установлены текстовые редакторы vim, elvis и emacs то какой будет запускаться командой editor?
Это умолчание можно установить вручную через "ln -s /usr/bin/vim /usr/bin/editor" или лучше не лазить руками в /usr и поступить другим способом?
Вот в man visudo, например, сказано что sudoers открывается редактором указаным в переменных VISUAL или EDITOR. У меня установлена переменная EDITOR=vim, но sudoers открывается в elvis.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Программы по умолчанию
aternatives из Debian? Нет. Не нужно.
$
editor
bash: editor: команда не найдена
если вам нужен vim, наберите vim.
visudo это особый случай.
There is a hard-coded list of one or more editors that visudo will use set at compile-time
that may be overridden via the editor sudoers Default variable. This list defaults to
/usr/bin/vi. Normally, visudo does not honor the VISUAL or EDITOR environment variables
unless they contain an editor in the aforementioned editors list. However, if visudo is con-
figured with the --with-env-editor option or the env_editor Default variable is set in
sudoers, visudo will use any the editor defines by VISUAL or EDITOR. Note that this can be a
security hole since it allows the user to execute any program they wish simply by setting
VISUAL or EDITOR.
-
- Сообщения: 117
Re: Программы по умолчанию
Да. Нужно .. :-)
cat /usr/bin/xdg-open
Код: Выделить всё
..
..
case "$DE" in
kde)
open_kde "$url"
;;
gnome)
open_gnome "$url"
;;
xfce)
open_xfce "$url"
;;
lxde)
open_lxde "$url"
;;
generic)
if (echo $url | grep '^magnet:?xt=urn:tree') then
eiskaltdcpp "$url"
elif (echo $url | grep '^magnet:?xt=urn:btih') then
qbittorrent "$url"
elif (echo $url | grep 'torrent$') then
qbittorrent "$url"
else
open_generic "$url"
fi
;;
*)
exit_failure_operation_impossible "no method available for opening '$url'"
;;
esac
..
..
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Программы по умолчанию
не надо путать солёное с цветным. Это часть спецификации http://standards.freedesktop.org/
ЗЫЖ конкретнее http://portland.freedesktop.org/xdg-utils-1.0/xdg-open.html
Re: Программы по умолчанию
Код: Выделить всё
$ wget -qO- http://slackware.osuosl.org/slackware-14.1/source/ap/sudo/sudo.SlackBuild | grep with-env-editor
--with-env-editor \
Код: Выделить всё
# EDITOR=mcedit visudo
# VISUAL=mcedit visudo
Код: Выделить всё
# EDITOR=vim visudo
# VISUAL=vim visudo
Где установить переменные окружения EDITOR и/или VISUAL, решать вам.
Re: Программы по умолчанию
То есть та сборка sudo, что по умолчанию идёт, не позволяет редактор менять? Надо sudo из слакбилда ставить?
Кстати у меня ещё и не получается подсветку синтаксиса в vim включить.
Кстати у меня ещё и не получается подсветку синтаксиса в vim включить.
Re: Программы по умолчанию
То есть всё совсем наоборот, что в переменные затолкнули, то и делает ея несекурность...
Рассказывайте, как отключали подсветку в vim, она там изначально есть и активирована, сколько себя помню...
Рассказывайте, как отключали подсветку в vim, она там изначально есть и активирована, сколько себя помню...
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Программы по умолчанию
позволяет. Проверьте сами, только от рута нужно задать EDITOR. УМВР.
наберите команду
Код: Выделить всё
:set syntax?
Re: Программы по умолчанию
Не подсветка в vim, а вся консоль черно-белой стала, я целый день репу чесал пока это понял.
Всё из-за того что я прописал в /etc/profile:
Код: Выделить всё
VISUAL=/usr/bin/vim
EDITOR=/usr.bin/vim
if [ -z "$STY" ]; then
exec screen -dR
fi
Вроде разобрался, что глупость сделал, потому как запуск screen нужно добавлять в сценарий входа ~/.bashrc. Но должен быть ещё глобальный сценарий входа в /etc, не обнаружив которого я записал это в /etc/profile.
А вот глобальные переменные присваивать кажется надо в профиле, или это ятоже неправильно сделал?
Re: Программы по умолчанию
Глобальный сценарий настройки профилей -- /etc/profile, его править не стоит, ибо в нём в конце:
Соответственно, общесистемные настройки профиля принято укладывать в /etc/profile.d/ в виде исполняемых сценариев *sh, а индивидуальные -- в профиль пользователя.
screen тоже вполне можно цветным сделать, это он только по умолчанию такой мрачный.
$ . /etc/profile
(что то же самое, что source /etc/profile) применит настройки профиля.
Или, для постоянного такого поведения, раскомментировать соответствующую строку в ~/.screenrc:
Код: Выделить всё
# Append any additional sh scripts found in /etc/profile.d/:
for profile_script in /etc/profile.d/*.sh ; do
if [ -x $profile_script ]; then
. $profile_script
fi
done
Соответственно, общесистемные настройки профиля принято укладывать в /etc/profile.d/ в виде исполняемых сценариев *sh, а индивидуальные -- в профиль пользователя.
screen тоже вполне можно цветным сделать, это он только по умолчанию такой мрачный.
$ . /etc/profile
(что то же самое, что source /etc/profile) применит настройки профиля.
Или, для постоянного такого поведения, раскомментировать соответствующую строку в ~/.screenrc:
Код: Выделить всё
# make the shell in every window a login shell
#shell -$SHELL
Re: Программы по умолчанию
Дошло наконец-то, что неправильного я сделал. Постоянно путаю, хотя и читал вроде, и говорили мне не раз. При логине пользователя сначала выполняется глобальный сценарий /etc/profile, затем локальный ~/.bash_profile, затем ~/.bash_login и, наконец, ~/.profile. Если я хочу, чтобы некоторые команды выполнялась выполнялись для всех пользователей - я должен изменить глобальный сценарий /etc/profile. Но поскольку в конце его стоит вызов сценариев из /etc/profile.d - я тем, что прописал запуск screen, перекрыл запуск этих сценариев - от этого и консоль вместе с vim черно-белой стала. А выполняются эти сценарии кстати в каком порядке, в алфавитном?
Re: Программы по умолчанию
Да, в конечеом итоге -- в алфавитном.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Программы по умолчанию
When bash is invoked as an interactive login shell, or as a non-interactive shell with the
--login option, it first reads and executes commands from the file /etc/profile, if that
file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and
~/.profile, in that order, and reads and executes commands from the first one that exists
and is readable. The --noprofile option may be used when the shell is started to inhibit
this behavior.
When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if
it exists.
When an interactive shell that is not a login shell is started, bash reads and executes com‐
mands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc
option. The --rcfile file option will force bash to read and execute commands from file
instead of ~/.bashrc.
When bash is started non-interactively, to run a shell script, for example, it looks for the
variable BASH_ENV in the environment, expands its value if it appears there, and uses the
expanded value as the name of a file to read and execute. Bash behaves as if the following
command were executed:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
but the value of the PATH variable is not used to search for the file name.
If bash is invoked with the name sh, it tries to mimic the startup behavior of historical
versions of sh as closely as possible, while conforming to the POSIX standard as well. When
invoked as an interactive login shell, or a non-interactive shell with the --login option,
it first attempts to read and execute commands from /etc/profile and ~/.profile, in that
order. The --noprofile option may be used to inhibit this behavior. When invoked as an
interactive shell with the name sh, bash looks for the variable ENV, expands its value if it
is defined, and uses the expanded value as the name of a file to read and execute. Since a
shell invoked as sh does not attempt to read and execute commands from any other startup
files, the --rcfile option has no effect. A non-interactive shell invoked with the name sh
does not attempt to read any other startup files. When invoked as sh, bash enters posix
mode after the startup files are read.
When bash is started in posix mode, as with the --posix command line option, it follows the
POSIX standard for startup files. In this mode, interactive shells expand the ENV variable
and commands are read and executed from the file whose name is the expanded value. No other
startup files are read.
Bash attempts to determine when it is being run with its standard input connected to a net‐
work connection, as when executed by the remote shell daemon, usually rshd, or the secure
shell daemon sshd. If bash determines it is being run in this fashion, it reads and exe‐
cutes commands from ~/.bashrc, if that file exists and is readable. It will not do this if
invoked as sh. The --norc option may be used to inhibit this behavior, and the --rcfile
option may be used to force another file to be read, but rshd does not generally invoke the
shell with those options or allow them to be specified.
If the shell is started with the effective user (group) id not equal to the real user
(group) id, and the -p option is not supplied, no startup files are read, shell functions
are not inherited from the environment, the SHELLOPTS, BASHOPTS, CDPATH, and GLOBIGNORE
variables, if they appear in the environment, are ignored, and the effective user id is set
to the real user id. If the -p option is supplied at invocation, the startup behavior is
the same, but the effective user id is not reset.
Re: Программы по умолчанию
bormant писал(а): ↑21.11.2013 15:20screen тоже вполне можно цветным сделать, это он только по умолчанию такой мрачный.
$ . /etc/profile
(что то же самое, что source /etc/profile) применит настройки профиля.
Или, для постоянного такого поведения, раскомментировать соответствующую строку в ~/.screenrc:Код: Выделить всё
# make the shell in every window a login shell #shell -$SHELL
Подразобрался немного. Мне удалось screen сделать цветным. Раскоментироал в ~/.screenrc строки
Код: Выделить всё
shell -$SHELL
altscreen on
И добавил такие же строки в глобальный /etc/screenrc
Но есть ещё один косяк. Когда я запускаю vi в screen, например "vi /etc/screenrc" у меня файл в редакторе открывается нормально. А когда "sudo vi /etc/screenrc" выводится только первая строка файла, затем он прокручивается при нажатом enter и в режим редактирования войти невозможно. Это опять что-то с переменными?
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Программы по умолчанию
угу. На этот раз уже с рутовыми. Попробуйте sudo -i.
Re: Программы по умолчанию
И что, sudo -i это значит при запуске новый логин произойдёт и /etc/profile будет выполнен, то есть вместо запуска vi запустится программа прописаная в конце /etc/profile.
Кстати в vim такой фигни нет, как в vi. Но что это было?
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Программы по умолчанию
обычно в /etc/profile НЕ прописывают никаких команд, кроме настроечных, которые настраивают оболочку. Например у Патрика:
1. устанавливаем некоторые переменные типа HOSTNAME
2. устанавливаем PATH
3. устанавливаем вид подсказки
4. выполняем все /etc/profile.d/*.sh
5. добавляем в PATH точку
т.е. ни о какой "команде в конце" речи нет.
а что такое по вашему vi? У меня такой команды вообще нет.
Shell
$ ll $(which vi)
lrwxrwxrwx 1 root root 3 сен 20 15:23 /usr/bin/vi -> vim*
и если я правильно путаю, vim запущенный как vi, работает так:
-v Режим Vi (как "vi")
-v Start Vim in Vi mode, just like the executable was called "vi". This only has
effect when the executable is called "ex".
Re: Программы по умолчанию
Ну если совсем точно, я прописал не в /etc/profile, а в /etc/profile.d/z-dot-in-non-root-path.sh
А куда Патрик рекомендует прописывать автозапускаемую программу?
Текстовый редактор elvis. Пакет elvis-2.2_0-x86_64-2.txz, входит в группу пакетов A.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Программы по умолчанию
Патрег рекомендует читать ман к тому, что у вас должно запускать автозапуск.
довольно странное решение, но это ваше право.
да, я знаю. У меня его нет, и я не вижу в нём никакого смысла.
Re: Программы по умолчанию
Ну как бы сказать. Желание проигнорировать рекомендацию возникло из-за того что файлы ~/.bash_profile, ~/.bash_login, ~/.profile - пользовательские, а /etc/profile - глобальный.
Впрочем, я сегодня придумал один способ (в других дистрибах подсмотрел аналог): Создаю файл /etc/skel/.bash_login и прописываю в нём:
Теперь у всех создаваемых пользователей будет глобальный сценарий автозапуска /etc/bash_login вкоторый и пропишу запуск screen и чего-нибудь ещё.
Так корректно?
Впрочем, я сегодня придумал один способ (в других дистрибах подсмотрел аналог): Создаю файл /etc/skel/.bash_login и прописываю в нём:
Код: Выделить всё
if [ -x /etc/bash_login ]; then
. /etc/bash_login
fi
Теперь у всех создаваемых пользователей будет глобальный сценарий автозапуска /etc/bash_login вкоторый и пропишу запуск screen и чего-нибудь ещё.
Так корректно?
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Программы по умолчанию
всё верно: вы логинитесь глобально, от nobody. А вот если bash запущен не глобально, то его поведение можно изменить тоже не глобально. Если вы желаете сделать ~/.bashrc для новых юзеров, запишите его в /etc/skel/.
да, работать будет, но я не понимаю смысла этого действия. Почему не сделать /etc/skel/.bash_login с нужными опциями? Что-бы менять настройки старых юзеров потом?