Set и Shopt - Почему два?

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

lshell является оболочкой, кодированной в Python, который позволяет Вам ограничить среду пользователя ограниченными наборами команд, принять решение позволить/запретить любую команду по SSH (например, SCP, SFTP, rsync, и т.д.), зарегистрировать команды пользователя, ограничение синхронизации реализации, и т.д.

74
18.09.2019, 02:37
6 ответов

Насколько я знаю, set -o опции - те, которые наследованы от других оболочек стиля Границы (главным образом ksh), и shopt опции - те, которые характерны для удара. Нет никакой логики, о которой я знаю.

41
27.01.2020, 19:31
  • 1
    Любая документация, которая показывает shopt наследован? –  Felipe Alvarez 03.07.2015, 04:13
  • 2
    ну, существует set -o опции как posix/physical/interactive-comments это не находится в ksh, и shopt которые находятся в других оболочках включая ksh поскольку некоторым нравится login_shell/nullglob. Как Вы говорят, нет никакой логики. Это была, вероятно, идея в запуске (что SHELLOPTS будет стандартными и BASHOPTS удар определенные), но который потерялся по пути, и теперь это только заканчивает тем, что было раздражающим и фиаско дизайна UI. –  Stéphane Chazelas 25.01.2018, 15:05

Похоже, что опции "набора" наследованы подоболочками, и shopts не.

3
27.01.2020, 19:31
  • 1
    Хорошая выгода. Интересно, является ли это намеренным выбором или побочным эффектом. –  Kevin 05.01.2013, 21:09
  • 2
    @user29778, По крайней мере, под ударом 4.1.5 (1) набор опций с set не наследованы подоболочками. Оба set и shopt опции не наследованы подоболочками. –  Martin 08.05.2013, 01:13
  • 3
    Может Вы указывать на документацию, которая описывает характеристики наследования обоих set и shopt ? –  Felipe Alvarez 03.07.2015, 04:12
  • 4
    Оба set -o и shopt опции наследованы подоболочками ((...), $(...), конвейерные компоненты). Наследованы ли они другим bash вызовы зависят от ли SHELLOPTS или BASHOPTS находятся в среде или нет. –  Stéphane Chazelas 23.08.2016, 16:47
[12176]set[112018] is POSIX 7: [112019]set - set or unset options and positional parameters | pubs.opengroup.org[12177]shopt[112022] is not: [112023]Shell & Utilities: Подробный Toc | pubs.opengroup.org[12178]Вероятно, связана с историей, упомянутой @Gilles..
14
27.01.2020, 19:31

Вероятно, вы сделали минимальную установку Debian без X Window (то, что вы называете «настольным компьютером»). В качестве пользователя root введите в командной строке

apt-get install gnome

Установка GNOME на компьютере.

Если вы предпочитаете установить KDE вместо него:

apt-get install kde-full

Просто для вашего сведения, это добавит несколько сотен Мб программного обеспечения на вашем компьютере. Это ни в путь не проблема, если ваша коробка Linux довольно жесткая в спецификациях.

EDIT: Похоже, что сетевые репозитории не настроены. Отредактируйте файл /etc/apt/sources.list таким образом, чтобы он содержал следующее:

deb http://httpredir.debian.org/debian jessie main
deb-src http://httpredir.debian.org/debian jessie main

deb http://httpredir.debian.org/debian jessie-updates main
deb-src http://httpredir.debian.org/debian jessie-updates main

deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main
-121--139328-

Команда shutdown уже имеет встроенный планировщик, поэтому для ее запуска в указанное время не требуется задание cron. В Linux, как и везде, лучше придерживаться принципа KISS (Keep It Short and Simple).

останов -h 22:00 будет работать нормально, нет необходимости запускать его в фоновом режиме. Добавьте команду в конце /etc/rc.local (или /etc/rc.d/rc.local в зависимости от системы) для выполнения в последнем сценарии запуска.

Преимущество отказа от использования cron заключается в том, что в этом пути завершение работы остается запланированным в течение дня, и его можно отменить в любое время путем ввода

shutdown -c 
-121--99025-

Разница заключается в измененной переменной среды, используемой bash. Установка с помощью команды set приводит к появлению $ SHELLOPTS . Установка с помощью команды shopt приводит к появлению $ BASHOPTS .

22
27.01.2020, 19:31

Легко, но потеряно в истории. Команда set изначально использовалась для изменения среды командной строки исходных оболочек unix / bin / sh . Затем, по мере развития различных версий Unix и добавления новых разновидностей оболочки, люди осознали, что им нужно иметь возможность изменять больше (окружение) вещей, чтобы поддерживать совместимость сценариев оболочки. В то время Bash стал очень популярен, и потребовались дополнительные sh ell opt ионы, вводящие shopt .

Вы можете увидеть эти попытки совместимости в команде shopt .

$ shopt
autocd          off
cdable_vars     off
cdspell         off
checkhash       off
checkjobs       off
checkwinsize    off
cmdhist         on
compat31        off
compat32        off
compat40        off
compat41        off
compat42        off
complete_fullquote      on
direxpand       off
dirspell        off
dotglob         off
execfail        off
expand_aliases  on
extdebug        off
extglob         off
extquote        on
failglob        off
force_fignore   on
globstar        off
globasciiranges off
gnu_errfmt      off
histappend      on
histreedit      off
histverify      off
hostcomplete    on
huponexit       off
interactive_comments    on
lastpipe        off
lithist         off
login_shell     on
mailwarn        off
no_empty_cmd_completion off
nocaseglob      on
nocasematch     off
nullglob        off
progcomp        on
promptvars      on
restricted_shell        off
shift_verbose   off
sourcepath      on
xpg_echo        off

Но не в команде set .

$ set -o
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
igncr           off
ignoreeof       off
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off
xtrace          off
8
27.01.2020, 19:31

set исходит из оболочки bourne (sh )и является частью стандарта POSIX, shopt, однако, не является и является bourne -снова оболочкой (bash )специфичным:

0 sjas@ssg 14:31:45 ~  
set | grep -e SHELLOPTS -e BASHOPTS
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:dotglob:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor

0 sjas@ssg 14:31:51 ~  
shopt | column -t | grep -v off
checkwinsize             on
cmdhist                  on
complete_fullquote       on
dotglob                  on
expand_aliases           on
extglob                  on
extquote                 on
force_fignore            on
histappend               on
interactive_comments     on
progcomp                 on
promptvars               on
sourcepath               on

0 sjas@ssg 14:31:57 ~  
set -o | column -t | grep -v off
braceexpand           on
emacs                 on
hashall               on
histexpand            on
history               on
interactive-comments  on
monitor               on

0 sjas@ssg 14:37:41 ~ 
sh 

$ set -o
Current option settings
errexit         off
noglob          off
ignoreeof       off
interactive     on
monitor         on
noexec          off
stdin           on
xtrace          off
verbose         off
vi              off
emacs           off
noclobber       off
allexport       off
notify          off
nounset         off
priv            off
nolog           off
debug           off

$ shopt
sh: 3: shopt: not found

$ 
4
27.01.2020, 19:31

Теги

Похожие вопросы