ldapmodify
сообщает вам, что слово Defaultpolicy
не является допустимым значением для элемента pwdPolicySubentry
.
Чтобы исправить это, вам нужно определить, какие допустимые значения могут быть указаны в вашей схеме, и использовать одно из этих допустимых значений.
Вот пример значения:
pwdPolicySubentry: cn=Default Password Policy,cn=Password Policies,cn=config
Таблица в ответе на переполнение стека (который получил его из Bash Hackers Wiki ) объясняет, как расширяются различные переменные Bash:
Вы делаете python -i -c "from $ @"
, который превращается в python -i -c "from sys" "import" "stdout"
и -c
принимает только один аргумент, поэтому он запускает команду из sys
. Вы хотите использовать $ *
, который будет заменен на python -i -c "from sys import stdout"
(при условии, что $ IFS
не установлен или начинается с пространство).
$ @
в двойных кавычках расширяется до списка элементов «$ 1» «$ 2» «$ 3»
и т. Д.
#!/bin/bash
expand () {
for string in "from $@" ; do
echo "$string"
done
}
expand sys import stdout
Python ожидает, что код будет в одном аргументе, а не в серии аргументов.
strace
, как всегда, покажет, что происходит:
bash-4.1$ echo $$
3458
И в другом месте (или вы могли бы выяснить, как strace bash ...
вызов функции):
bash-4.1$ strace -ff -o blah -p 3458
И обратно в эту первую оболочку:
bash-4.1$ from sys import stdout
File "<string>", line 1
from sys
^
SyntaxError: invalid syntax
>>>
bash-4.1$
А затем обратно в оболочку strace
:
Process 3458 attached
Process 25224 attached
^CProcess 3458 detached
bash-4.1$ grep exec blah.*
blah.25224:execve("/usr/bin/python", ["python", "-i", "-c", "from sys", "import", "stdout"], [/* 54 vars */]) = 0
Таким образом, фактический аргумент -c
- -c "from sys"
из-за того, как " $ @ "
расширяется, или усеченная команда, на которую запускается python
.
Strace действительно показывает, какие аргументы используются. Но самый простой способ увидеть, что обрабатывается, это добавить printf '<%s> '
перед каждой соответствующей строкой, и закрывающий echo
(для генерации новой строки):
Таким образом, функция может быть изменена на такую:
from () {
printf '<%s> ' "from $@"; echo
printf '<%s> ' python3 -i -c "from $@"; echo
}
И при вызове:
$ from sys import stdout
<from sys> <import> <stdout>
<python3> <-i> <-c> <from sys> <import> <stdout>
Ясно, что "from sys" посылается в python как один аргумент.
Это то, что получает python, и python действует на "from sys".
Python вызывается как
execve("/usr/bin/python", ["python", "-i", "-c", "from sys", "import", "stdout"], [/* 54 vars */])
(см. ответ трига ).
Чтобы $ @
раскрыть в виде одной строки (при условии разумного $ IFS
), вы можете использовать $ *
внутри двойных кавычек: {{1 }}
python3 -i -c "from $*"
Подтверждено с помощью strace -e execve
:
execve("/usr/bin/python", ["python", "-i", "-c", "from sys import stdout"], [/* 54 vars */]) = 0