Это работает, потому что read
разбивает все на пробелы (IFS), поэтому, если var1 пуст или начинается с '#', пропустите его.
while read var1 var2 var3 var4; do
case $var1 in
''|\#*) continue ;; # skip blank lines and lines starting with #
esac
echo "var1: '$var1'"
# stuff with var1, etc.
done < "${1:-default_config_file}"
Затем ввод должен быть перенаправлен в цикл, а не в список команд while
. "$ {1: -default_config_file}"
расширяется до первого параметра командной строки, если не пуст, в противном случае расширяется до default_config_file
, вы также можете использовать расширение переменных и т. Д. В строке значения по умолчанию .
Поскольку вы заинтересованы в минимизации предварительной обработки, я думаю, что это эквивалентно, но также удаляет все комментарии:
while read line; do
echo "${line%%#*}" | {
read var1 var2 var3 var4
[ -z "$var1" ] && continue
# stuff with var1, etc.
for i in 1 2 3 4; do eval echo "\"var$i: \$var$i\""; done #debug only!
}
done < "${1:-default_config_file}"
Здесь используется функция обработки подстроки расширения параметров оболочки. $ {line %% # *}
расширяется до исходного значения строки
, за исключением первого #
и всего после него удаляется. Загрузите это в var1-4
и продолжайте как обычно. Тест для continue
сокращается, потому что теперь нам нужно проверять только пустую строку, а не #
.
Ах, это просто. Ваш jenkins
пользователь определен в /etc/passwd
следующим образом:
jenkins:x:996:993:Jenkins Automation Server:/var/lib/jenkins:/bin/false
Видите последнюю запись, в которой говорится /bin/false
? Для пользователя jenkins не определена допустимая оболочка, поэтому сеанс немедленно завершается — и вы возвращаетесь обратно к корневой оболочке, с которой вы начали.
/bin/false
поскольку оболочка входа пользователя не позволяет пользователю войти в систему обычными средствами. Вы не хотите менять это, так как это мера безопасности. Просто попросите другую оболочку при переключении на целевого пользователя:
sudo su -s /bin/bash jenkins
Это если вашему действительно нужно использовать сеанс интерактивной оболочки в качестве jenkins
пользователя. Поскольку у пользователя нет реальной оболочки входа в систему, кажется, что вы не должны использовать этого пользователя в интерактивном режиме во время нормальной работы.