Ожидайте, так в основном Вы хотите к ssh к myhost, затем сразу su базироваться без подсказки пароля, с побочным эффектом вставления пароля root ps
вывод для всех на локальном и возможно удаленных машинах для наблюдения?
Да, umm, не делайте этого.
Существует три способа сделать это, что и работа везде и устраняет Ваше раскрытие пароля root (в порядке, я предпочел бы их):
PermitRootLogin yes
или только с открытым ключом с PermitRootLogin without-password
.sudo -i
вместо su --login
. Настройте sudo (через visudo
) позволить Вашему некорневому пользователю выполнять все команды как корень (возможно даже без пароля, но затем Ваш некорневой пользователь является корневым эквивалентным с точки зрения безопасности),su
не подсказка для пароля от Вашего лица, не использующего своего права. Ваш пользователь является еще раз корневым эквивалентным с точки зрения безопасности.Может быть, попробовать:
unset arr
printf %s\\n a b c | {
readarray arr
echo ${#arr[@]}
}
Я ожидаю, что это сработает, но как только вы выйдете из последней {
оболочки ; }
в конце конвейера |
вы потеряете значение переменной. Это связано с тем, что каждый из |
отдельных |
процессов в конвейере |
выполняется в подоболочке (
подоболочка )
. Итак, ваша вещь не работает по той же причине:
( arr=( a b c ) ) ; echo ${arr[@]}
... не работает - значение переменной было установлено в другом процессе оболочки, отличном от того, в котором вы ее вызываете.
Для обеспечения выполнения команды readarray
в текущей оболочке, либо используйте технологическую замену вместо трубопровода:
readarray arr < <( echo a; echo b; echo c )
, либо (если bash
4. 2 или более поздняя версия) используйте опцию оболочки lastpipe
:
shopt -s lastpipe
( echo a; echo b; echo c ) | readarray arr
readarray
также может читать из stdin, поэтому:
readarray arr <<< "$(echo a; echo b; echo c)"; echo ${#arr[@]}