В zsh
,
printf '<%s>\n' ${@[2,$#]}
то же как
printf '<%s>\n' $@[2,-1]
печатает непустые позиционные элементы 2 к последнему. Это совпадает с записью (если $ # == 5):
printf '<%s>\n' $2 $3 $4 $5
Так:
$ set 1 2 '' '*' 5
$ printf '<%s>\n' $@[2,-1]
<2>
<*>
<5>
Вкладывать эквивалент bash
, Вам было бы нужно:
$ set 1 2 '' '*' 5
$ a=("$@")
$ IFS=; set -f
$ printf '<%s>\n' ${a[@]:1}
<2>
<*>
<5>
Вам нужен посреднический массив потому что ${@:2}
не прокладывает себе путь (по крайней мере, не с 4.2.45).
Конечно, если Вы хотели все элементы, но первый независимо от того, пусты ли они или нет, необходимо было бы записать это:
$ printf '<%s>\n' "$@[2,-1]"
<2>
<>
<*>
<5>
в zsh
и
$ printf '<%s>\n' "${@:2}"
<2>
<>
<*>
<5>
в bash
.
Отметьте это zsh
в конечном счете включенный ${array:first:n}
синтаксис (только, когда это не будет конфликтовать с модификаторами стиля csh), таким образом, вышеупомянутый удар (на самом деле ksh) код будет также работать в более новых версиях zsh
.
Относительно причины несоответствия между ${a[@]:1}
по сравнению с ${@:2}
, необходимо принять во внимание это в bash
, вопреки zsh
или csh
или rc
, но как ksh
где bash
скопированный его массивы с, массивы являются разреженными, и индексы запускаются в 0.
${a[@]:4:5}
возвращает 5 первых элементов, indice которых больше или равен 4. Первый элемент в $@
имеет indice 1 ($1
), в то время как массив, определенный как a=(...)
установили его элементы с индексами, запускающимися в 0.
Ну, это не точно верно. В bash
, "$@"
расширяется как "$1" "$2" "$3" "$4" "$5"
, в то время как "${@:0:1}"
похож "$0"
если и только если $ #> 0. "$@"
кажется, похож "${@:1}"
в то время как $@
(без кавычек), только похож ${@:1}
если $IFS
сброшен или непуст. Это походит на ошибки мне. Поведение в ksh
отличается и на этот раз более последователен.
root@hostname # su - oracle
could not open session
root@hostname # grep oracle.*nofile /etc/security/limits.conf
oracle - nofile unlimited
установить nofile в limits.conf
на некоторое количество вместо неограниченного:
root@hostname # vi /etc/security/limits.conf
root@hostname # grep oracle.*nofile /etc/security/limits.conf
oracle - nofile 65536
root@hostname # su - oracle
-bash-4.1$ id
uid=201(oracle) gid=5504(oinstall) groups=5504(oinstall),251(dba),5502(asmdba),5505(oper)
-bash-4.1$
Если "nofile" установлен на "unlimited" в /etc/security/limits.conf (или в файлах в limits.d), то пользователь не может авторизоваться.
Esto es lo que funcionó para mí, en mi caso su estaba funcionando para algunos usuarios. Entonces, revisé el contenido de /etc/pam.d/su y tenía las siguientes dos líneas:
sesión incluye sistema -autenticación
sesión pam opcional _xauth.so
Comenté el primero, reinicié la sesión y funcionó.
Комментарий «сессия включает систему -auth» сработал для меня.
env :docker oraclelinux :последний, после установки пакета oracle -база данных -сервер -12cR2 -preinstall.x86 _64.
комментарии «сессия требуется pam _limit.so» во всех файлах в «/etc/pam.d» решает
(ОЛ7.7)
sed -i -r 's/^(session\s+required\s+pam_limits.so)/#\1/' /etc/pam.d/*
Я играл с докером и oraclelinux:7-slim
, чтобы установить базу данных Oracle. После установки пакета oracle -database -preinstall -19c я перестал su -
входить в учетную запись oracle. Здесь в limits.conf
говорят о «без ограничений на количество файлов». Я пробовал это, и это не сработало. Комментирование строки session include system-auth
в /etc/pam.d/su
работает.
Однако до того, как я установил пакет, конфигурация была все той же, и я смог выполнить su - oracle
. Даже после установки пакета, если я создам нового пользователя, принадлежащего к той же группе, что и оракул, я могу su
войти в его учетную запись. Так что должно было быть что-то, что изменилось в пакете.
После некоторого расследования я обнаружил, что пакеты устанавливаются oracle-database-preinstall-19c.conf
в /etc/security/limits.d/
, и этот файл содержит все настройки ограничений оракула. Только когда я прокомментировал следующую строку, я смог su
войти в аккаунт оракула:
жесткий мемлок оракула 134217728
Блокировка памяти устанавливается на 128 Гб. Попытки установить меньшие значения не увенчались успехом. Только когда я прокомментировал.
Итак, теперь вы знаете, что это является причиной. Но, конечно, если вы закомментируете строку session include system-auth
в /etc/pam.d/su
, это тоже сработает.
Убедитесь, что в строке pam_limits.so
есть такие вкладки:
session^I^Irequired^Ipam_limits.so$
При добавлении этой строки важны вкладки.
sed -i '$a session^I^Irequired^Ipam_limits.so' /etc/pam.d/su
Если вкладки отсутствуют, то вы увидите что-то вроде этого:
[ azureadmin]# su - ALOGIN
Last login: Fri Jun 11 08:42:32 CDT 2021 on pts/0
su: cannot open session: Permission denied