Короткий ответ: это не отдельные вызовы; вы выполняете svn update
только один раз.
(Вы можете проверить это, запустив функцию под set -x
, что заставляет bash печатать каждую команду по мере ее выполнения: set -x; svn_update_all; set +x
)
Если вы действительно хотите запустить svn
несколько раз (и вы уверены, что у вас никогда не будет пробелов в путях), вы можете просто убрать кавычки вокруг $repos
:
svn_update_all ()
{
repos=`find . -name '.svn'`
for i in $repos
do
svn update `dirname $i`
echo
done
}
Вот как обстоит дело с циклами for
. bash(1)
говорит:
for name [ [ in [ word ... ] ] ; ] do list ; done
Список слов, следующий за in, расширяется, генерируя список элементов. Переменная name устанавливается в каждый элемент этого списка по очереди по очереди, и каждый раз выполняется list.
Таким образом, содержимое блока for
выполняется один раз для каждого word после in
. Вот пример:
count=0
for num in one two three; do
do
let count++
echo "loop $count: '$num'"
done
loop 1: 'one' loop 2: 'two' loop 3: 'three'
Но строка в кавычках воспринимается как одно слово. В основном это и происходит в вашем сценарии:
count=0
for num in "one two three"; do
let count++
echo "loop $count: '$num'"
done
loop 1: 'one two three'
Уберите кавычки, и $repos
снова будет разделен на отдельные слова, а затем svn update
будет запущен один раз для каждого репозитория, как вы и ожидали.
Обратите внимание, однако: это сломается, если у вас есть путь, в котором есть пробелы.
Самый простой способ обработки путей, которые могут содержать пробелы - это направить вывод find
во встроенную команду read
:
find . -name '.svn' | while read i
do
svn update `dirname $i`
echo
done
Самый безопасный способ - использовать действия find
-exec
или -execdir
, чтобы не беспокоиться о том, что bash
разделит имена файлов:
# print the repo dir, then run "svn update" in it
find . -name '.svn' -printf '%h: ' -execdir svn update \;
./mpc: Updating '.': U trunk/src/pow.c U trunk/tests/pow.dat U trunk/m4/mpc.m4 Updated to revision 1455. ./mpfr: Updating '.': [etc]
Модуль pam_tally2
ведет подсчет попыток доступа и может отказать в доступе, если слишком много неудачных попыток. Man-страницы для этого модуля содержат больше информации.
Спецификация этого модуля находится в /etc/pam.d/login
, как, например,:
auth required pam_tally2.so deny=6
Вы можете определить количество ошибок для пользователя с помощью:
pam_tally2 --user=<username>
Вы можете сбросить счетчик с помощью:
pam_tally2 --user=<username> --reset
Я столкнулся с той же проблемой -один пользователь не может войти в систему через Putty или локальный ssh, но нет новых записей в pam _tally2 с действительными или недействительными паролями.
Другие симптомы:
Все остальные пользователи смогли правильно войти в систему, так что это не было общей проблемой конфигурации PAM.
Решение:
faillock --user <username> (showed 5 valid failures)
faillock --user <username> --reset
faillock --user <username> (now has 0 valid failures)
После этого я смог войти в систему через Putty и успешно использовать "su -"